c++中全局变量定义后不能赋值,在函数内部就可以赋值
#include<iostream>using namespace std;
int i = 90;
i = 20;//这里报了一个此声明没有存储类或类型说明符
int main()
{
i= 10; //在这里就可以赋值
cout << i << endl;
return 0;
}
大佬们,为啥我定义了一个i,可为啥赋值不了,但在函数内部就可以赋值。 本帖最后由 心驰神往 于 2021-1-3 16:44 编辑
C++中,全局变量只能声明、初始化,而不能赋值。这是规定吧
声明:int i;
初始化:int i = 90;(在声明的时候顺带赋值叫做初始化)
赋值:i = 20;
另外你上传的代码中 i= 10后面的分号写成中文状态下的了 心驰神往 发表于 2021-1-3 16:41
C++中,全局变量只能声明、初始化,而不能赋值。这是规定吧
声明:int i;
全局变量不能在定义后再赋值,如果要再赋值的话就只能再代码块里赋值了,是c++的规定,这样理解对么 johnzsj 发表于 2021-1-3 16:56
全局变量不能在定义后再赋值,如果要再赋值的话就只能再代码块里赋值了,是c++的规定,这样理解对么
是的 心驰神往 发表于 2021-1-3 17:01
是的
谢谢,大佬 johnzsj 发表于 2021-1-3 17:03
谢谢,大佬
我刚开始学C++,关于这个问题我是在网上找的相关说明 本帖最后由 倒戈卸甲 于 2021-1-3 21:49 编辑
其实和变量全不全局没什么关系,C++也好,C也好,只是单纯的函数外面不能有可执行语句,函数外面允许的语句就那么几个,包含头文件,声明变量,包含命名空间之类的。
至于为什么这样规定,那就说来话长了,涉及到代码编译的阶段和过程以及程序运行的阶段和过程,很难现在就给你讲明白,你学到相关知识以后自然理解。不过我觉得解决你的困惑也不需要讲明白这些,核心是int i=20;这条语句与int i;i=20这两条语句并不能等同。前者一条语句其实是由编译器来完成的,后者两条语句的则不行,i=20这个赋值操作是真正的运算,要放在计算机内存里去"执行"。在此基础上再讲一点点就是,代码的编译生成程序,这个过程只涉及代码区和全局区,其中代码区是只读的,全局区只能存放数据,那个“执行”操作本来就完成不了,属于无效语句,所以这样规定。。。嗯,就到这里,再讲你该迷糊了{:10_256:}
页:
[1]