数组和指针

记得研究生面试时,导师问过我数组和指针的不同,我没答上,十分紧张。后来专门查了一些资料,部分弄清了不同,但直到今天看了《C专家编程》,才对这两者的不同有了更深的了解。


指针有一个让人感到迷惑的性质,他存储的是一个地址,而自身又有一个地址,因此产生了“地址Y”和“地址Y的内容”之间的区别。编译器通过上下文来判断Y的具体含义,以下面这个赋值语句为例):

X = Y;

在这个上下文环境里,X是左值,含义是”X所代表的地址“。左值在编译时可知,表示存储结果的地方。Y是右值,含义是”Y所代表的地址的内容“。右值只有在运行时才能直到,如无特殊说明,右值表示”Y的内容“。


C语言中引入了”可修改的左值“这个属于。它表示左值允许出现在赋值语句的左边。这个奇怪的术语是为了与数组名区分,数组名也用于确定对象在内存中的位置,也是左值,但它不能作为赋值的对象。因此,数组名是个左值但不是可修改的左值。标准规定赋值符必须用可修改的左值作为它左边一侧的操作数。用通俗的话说,只能给可修改的东西赋值。

保存数据的地址

保存数据

间接访问数据,首先取得指针的内容,把它作为地址,然后从这个地址获取数据。

如果指针有一个下标[I],就把指针的内容加上I作为地址,从中提取数据。

直接访问数据,a[I]只是简单地以a+I为地址取得数据。

通常用于动态数据结构

通常用于存储固定数目且数据类型相同的元素。

相关函数为malloc(),free()

隐式分配和删除

通常指向匿名数据

自身即为数据


参考:《C专家编程》

你可能感兴趣的:(数组)