【急】小弟我刚学C语言 由于自学 无法理解变量的意思 望高手解答下

作者&投稿:答薛 (若有异议请与网页底部的电邮联系)
简单而深入给你讲下你就会明白:

所谓int,float,double,char,short等量为什么要划分怎么多呢?以为在人处理事的事情基本在这个范围之内,少了不够用,多了浪费空间。若你想设其他类型变量都行。C语言构造体可以实现(只不过不是关键字而已)在内存中根据类型只不过划分一下空间大小,内存又不认识那些什么类型的。

这是编译原理里的:静态变量、外部变量、寄存器变量和自动存储变量

和我一样喜欢思考问题(我开始学连个#include前面为什么是#号都要找为什么用这个符号?有什么原因和意义?)

在内存中分为5个区。

全局静态区:
就你说的静态变量,外部变量也是。

寄存器:简单的说就是CPU里的“内存”,有何作用呢?计算机在处理数据都是从中读取到内存中的数据进行处理。但是在有时候比如循环一亿次就读取一亿次,而在CPU寄存器中存放这个变量则节省每次读取内存中的往返时间。提高程序执行效率。

栈区(动态区):就是自动变量,当一个函数调用完之后就释放:如结构图

【〓〓〓〓〓〓〓〓〓〓〓
←(入口)
这比喻成一条内存中的栈区(动态区)

存放数据就从入口进到最里面,比如进入

main()

{
int
a=1,b=2;

f(a,b)

}

假设进入内存用了内存空间的%1空间(栈)

调用f(a,b)

f(int
x,int
y)

{

int
z=3;

z=x+y+z;

printf("%d",z);

}

调用函数再进栈区到了%2空间(这空间包含mian
()f()空间)

当调用完出来释放时候只能是一头进一头出的,所以f()在最外面先出来。

调用完出来后再回到main()函数(%1栈空间)上词的f()中的变量z也就释放掉了。

如果定义一个static
f()中的z就不是放在栈区了,而是放在静态区。

明白了么?学数据结构和编译原理就知道了。现在深究说明你喜欢动脑子,不错!

要解答清楚还需要长篇大论,最后可能和教科书上的内容差不多,不同的变量类型占用的内存空间的数量不同,用以表达不同范围的数据以适应不同的用途,比如你某个变量从始至终都是一个数值不大的整数,把你就用整形变量,比较节省内存并且速度快,而如果你的数值含有小数,并且精度要求高,那你就要选用合适精度的浮点型变量。

你要把数据放到计算机存储器你去,数据可不能飘着啊,不然要内存干吗?

比如说你定义一个整型变量a,那么计算机就在存储器中指定一块空间放a的值,以后我们就可以通过a这个变量找到a对应的值啦,不过a可只能放-1、-2、-3……0、1、2、3……这样的整数哦,其他变量类型也同样道理

~