鱼C论坛

 找回密码
 立即注册
查看: 2519|回复: 6

[已解决]c++中全局变量定义后不能赋值,在函数内部就可以赋值

[复制链接]
发表于 2021-1-3 15:53:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>

using namespace std;

int i = 90;

i = 20;  //这里报了一个此声明没有存储类或类型说明符

int main()
{
        i= 10; //在这里就可以赋值

        cout << i << endl;

        return 0;
}

大佬们,为啥我定义了一个i,可为啥赋值不了,但在函数内部就可以赋值。
最佳答案
2021-1-3 16:41:32
本帖最后由 心驰神往 于 2021-1-3 16:44 编辑

C++中,全局变量只能声明、初始化,而不能赋值。这是规定吧

声明:int i;
初始化:int i = 90;(在声明的时候顺带赋值叫做初始化)
赋值:i = 20;

另外你上传的代码中 i= 10后面的分号写成中文状态下的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-3 16:41:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 心驰神往 于 2021-1-3 16:44 编辑

C++中,全局变量只能声明、初始化,而不能赋值。这是规定吧

声明:int i;
初始化:int i = 90;(在声明的时候顺带赋值叫做初始化)
赋值:i = 20;

另外你上传的代码中 i= 10后面的分号写成中文状态下的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-3 16:56:18 | 显示全部楼层
心驰神往 发表于 2021-1-3 16:41
C++中,全局变量只能声明、初始化,而不能赋值。这是规定吧

声明:int i;

全局变量不能在定义后再赋值,如果要再赋值的话就只能再代码块里赋值了,是c++的规定,这样理解对么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-3 17:01:21 | 显示全部楼层
johnzsj 发表于 2021-1-3 16:56
全局变量不能在定义后再赋值,如果要再赋值的话就只能再代码块里赋值了,是c++的规定,这样理解对么

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-1-3 17:03:38 | 显示全部楼层

谢谢,大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-3 17:05:36 | 显示全部楼层


我刚开始学C++,关于这个问题我是在网上找的相关说明
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-3 21:48:04 | 显示全部楼层
本帖最后由 倒戈卸甲 于 2021-1-3 21:49 编辑

其实和变量全不全局没什么关系,C++也好,C也好,只是单纯的函数外面不能有可执行语句,函数外面允许的语句就那么几个,包含头文件,声明变量,包含命名空间之类的。
至于为什么这样规定,那就说来话长了,涉及到代码编译的阶段和过程以及程序运行的阶段和过程,很难现在就给你讲明白,你学到相关知识以后自然理解。不过我觉得解决你的困惑也不需要讲明白这些,核心是int i=20;这条语句与int i;i=20这两条语句并不能等同。前者一条语句其实是由编译器来完成的,后者两条语句的则不行,i=20这个赋值操作是真正的运算,要放在计算机内存里去"执行"。在此基础上再讲一点点就是,代码的编译生成程序,这个过程只涉及代码区和全局区,其中代码区是只读的,全局区只能存放数据,那个“执行”操作本来就完成不了,属于无效语句,所以这样规定。。。嗯,就到这里,再讲你该迷糊了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 06:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表