2 hchchc6016 hchchc6016 于 2016.03.07 10:45 提问

内部变量和外部变量就是局部变量和全局变量吗?

局部变量和全局变量是从作用域分类的
外部变量就是前面加了extern,这个是从生存期定义的
这个两者应该不能混为一谈
为什么很多地方就默认为内部变量和外部变量就是局部变量和全局变量
这样子的话那么这句话怎么理解呢?图片说明

3个回答

qq_27564553
qq_27564553   2016.03.07 11:27
已采纳

首先把对应的外部和内部分别说成是全局和局部,这个内外表示的域(即{})的内外,而不是extern表示的文件的内外。不过确实很多的时候这样的表示由于没有统一的叫法,不同的作者有自己的叫法,常常让读书的人费解。你ppt截图那个应该说的局部变量和全局变量的区别,然后就是因为寄存器就那么几个基本都是用来存放临时的变量才可以用,想想如果你好几个全局变量一直放在寄存器一直占用着寄存器,也就放那么几个全局,并不能提高程序的效率啊。因为寄存器速度很快,高效的利用才能发挥其效率,而频繁的改变它里面的值才能发挥这种效率。
另外,寄存器变量早就已经是毫无意义的东西了,基本都交给编译器去做了

qq_27564553
qq_27564553 回复hchchc6016: 就是内部定义的变量,而形参是编译器分配的,不是自己定义的
接近 2 年之前 回复
qq_27564553
qq_27564553 回复hchchc6016: 如果算广义的内部的话是的,但是这里的内部指的是局部变量啊
接近 2 年之前 回复
hchchc6016
hchchc6016 形参变量不就是内部变量的一种吗?为什么又要分开写呢?
接近 2 年之前 回复
u010177010
u010177010   2016.03.07 10:54

由于受硬件寄存器长度的限制,所以寄存器变量只能是char、int或指针型。寄存器说明符只能用于说明函数中的变量和函数中的形参,因此不允许将外部变量或静态变量说明为"register",C++11标准register变量相当于以前的anto变量,C++11标准的auto又赋予了新的功能。

u010177010
u010177010   2016.03.07 10:55

由于受硬件寄存器长度的限制,所以寄存器变量只能是char、int或指针型。寄存器说明符只能用于说明函数中的变量和函数中的形参,因此不允许将外部变量或静态变量说明为"register",C++11标准register变量相当于以前的anto变量,C++11标准的auto又赋予了新的功能。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!