c++中为什么不能对全局变量在函数外赋值?

例如:
int i;
i=1;//该赋值语句必须放在函数外,否则编译会报错,这是为什么?

你要考虑到,在全局中,语句的执行顺序是没有保证的,所以只能在声明的时候定义.

假设允许这样的赋值,那你觉得下面这个程序应该怎么样执行呢?

int i;
i=1;
int main()
{
++i;
}
++i;
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-05-13
在函数外赋值 就变成了 函数外有了赋值语句。
c/c++ 程序结构不允许。
赋值语句要写在子程序里或主程序main()里。

在函数外,你可以用初始化:
int i=1;
main(){.。。}本回答被提问者采纳

关于C++全局变量和局部变量的问题!!
由于在不同函数体内定义的变量只在它所在的函数体内部有效,所以,不同函数体中可以定义相同名字的变量,但它们代表不同的对象,互不干扰。它们在内存中占用不同的内存单元。函数的形参也是该函数的局部变量,其他函数不能调用。全局变量:一个源程序文件可以包含一个或若干个函数。在所有函数体外部定义的...

C++ 为什么不鼓励使用全局变量
因为全局变量容易导致代码的可复用性下降,以及对象管理的困难。试想,如果某个类使用了全局变量,则移植该类的时候,必须将全局变量也一起移植。更可怕的是,如果这个全局变量还是一个对象,并且初始化也在不同的类中实现,那么所有这些代码将被永久捆绑在一起,无法分离了。任何一个与此全局变量相关联...

c++ 全局变量
C\/C++语言中能够被顺序执行的控制流代码只能写在函数作用域内,在函数作用域以外之处写赋值语句自然出错。这个规定从某种意义上强调了结构化程序设计的思想(顺序的语句必须通过写到函数内成为模块化的代码通过main函数这类入口进行调用,而不是在一个源文件依据语句的位置被执行)。顺便:char *a =(char...

为什么在函数里面申请的动态内存,在函数外就无效?
在函数里面申请的动态内存在函数有效的,但是指向这块内存的指针需要是全局的,否则局部指针被释放就找不到这块动态申请的内存,这样也就用不了,相当于无效了。C\/C++定义了4个内存区间:代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store)。通常定...

为什么float变量先声明再赋值在编译时会出现错误
全局变量可以初始化,不能在函数外赋值。在函数外赋值,就变成了函数外有了赋值语句。c\/c++的程序结构是不允许这种情况出现的。所以赋值语句必须写在子程序里或主程序main()里。

C\/C++怎么在某个函数中声明或定义全局变量?全局变量有没有这样使用的...
全局变量的定义只能在函数外部,不能在函数内部。当要使用其他文件里的定义的全局变量时,可以用关键字extern,格式是 [extern 类型 变量名;]希望对你有帮助。

C++ 为什么不能这样直接用函数修改全局变量的值?
char&x)即可。因为按引用方式传参,引用相当于是外部变量的别名,实际操作的就是该变量,在函数内对该变量进行修改的话,在外部该变量也会相应被修改。而按值方式传参,实际上是复制了一个外部变量的副本进入函数中,在函数内操作的为该副本,对该变量的修改并不会实际修改函数外的该变量。

在一个函数中定义了一个变量,如何在另一个函数使用这个变量
C\/C++中,函数体内定义的变量具有函数作用域,无法在外部使用这个变量本身。由于这种定义式在栈内存分配空间,变量一旦被创建,函数结束后就会被自动销毁,因此也称为自动(auto)变量。如果要在多个函数中共享变量,那么可以使用作用域为全局\/编译单元的静态变量。这些变量定义后,在进程开始时自动创建,进程...

在main函数外给数组赋值
你这样是不对的,因为代码必须在函数体内部。在外部赋值只能是初始化的时候。比如 static int a = 3;这是正确的。另外,楼上的回答并不完全准确。在c++中,函数在main函数之前运行,是可以实现的。声明一个类 class A { A(){ printf("Function before main!\\n");} ~A(){ printf("Function ...

全局变量为什么建议少用
1.由于全局变量,程序运行期间,始终占有那块存储区,所以空间利用率比较低,大量的全局变量,很快就会把内存用光,所以要少用全局变量;2.全局变量由于每个函数都可以使用,所以任何一个函数的修改,如果修改了全局变量,都有可能影响到其他函数,所以不利于调试。

相似回答