以下是引用zjsxwc在2011-2-18 19:48:23的发言:
期待啊
c对变量的地址 和 变量的内容 怎么存储的?两者有什么关系
zjsxwc,希望你能接受我下面的说法:
1、变量的本质是:内存中的一段连续存储空间,可以认为就是“空间”;
2、变量有3个要素:
a、变量名称:用以区别于其他变量;但本质上是“人文化”的首地址;(这个概念我下面有专门论述)
b、变量类型:对空间的字节数的约定和对其中二进制内容解释时的方式的约定;
c、变量的值:对空间中的二进制内容按变量类型解释所得到的“适应于人”的结果(但于人的情感无关)。
3、变量的定义:
a、变量必须先定义方可使用(C99也相同);
b、
定义变量的本质是:申请存储空间(所谓的静态存储分配,包括数组在内)!
4、除了机器语言以外的所有程序设计语言,所编写的
源代码程序,都必须先转换成机器语言程序,方可执行。
第4点与前面的内容综合起来,将有下述推导:
1、编程者所编写的源代码,并不是最终的执行代码,都需要翻译成机器代码;
2、只有在源代码中才会出现“人文化”的“变量名称”,当源代码转换成机器代码后,所有的变量名称(包括数组名称、函数名称)统统不复存在,而是被真正的“地址”所替代;
3、在将源代码转换成机器代码的过程中,即,编译过程中,编译软件将“记住”每一个变量名称,并可以通过计算机内部机制得到该变量的首地址,但这仅限于变量(数组、函数),不适用于常量和表达式!
4、“变量的首地址”这个说法的更精确地表达是:“
一段连续存储空间(变量)的多个字节中的第一个字节(
首)的
地址”!
5、从上面的说法可以知道,无论变量长度如何,其首地址永远是第
一个“首”字节的地址(注意红颜色的两个字),那么,结论是:
任何类型的变量,其首地址总是4B(以32位计算机系统为前提)!
6、这个4B的地址值,当然也可以保存在内存中,当然要消耗4B,而这种类型在C语言中,就被称为“指针”!
7、变量名称出现在C语言表达式不同的位置,其意义也有所不同:
A)在=(含+=、-=等运算符)左侧,应读作:某空间;
B)在=右侧和其他地方,应读作:某空间的值。
例如:int a, b = 3, c;
a = b; //将b空间的值赋值给a空间
c = a + b; //取a空间的值与b空间的值求和,和值赋值给c空间
请不要认为我这样做是故弄玄虚,这样说是将简单问题复杂化了,但其目的是将以后的复杂问题简单化!
两者的关系这个问题,其实是指针运算的问题,请允许我稍后随着有关问题阐述。
上述的问题简单,但与书上的说法又有些许差别,请仔细阅读,再回头看我在3楼的论述,可能会容易些了。