数组和指针
数组定义char a[6];请求预留6个字符的位置,并用名称a表示。也就是说,有一个称为“a”的位置,可以放入6个字符。
指针声明char *p;请求一个位置放置一个指针,用名称“p”表示。这个指针几乎可以指向任何位置:任何字符或任何连续的字符,或者哪里也不指。
*声明 char a[] =“hello”;
char p =“world”; 将会初始化下图所示的数据结果:
数组和指针“等价”
不表示它们相同,甚至也不能互换。它的意思是说数组和指针的算法定义使得可以用指针方便地访问数组或者模拟数组。在C语言中只是指针算术和数组下标运算等价,指针和数组是不同的。
数组不能被赋值
如果数组出现在赋值的右边,则只有它所退化的指针被复制,数组不可能出现在赋值的左侧,永远不会有一个完整的数组让他接收。
数组和指针的区别:
- 数组是一个由(同一类型的)连续元素组成的预先分配的内存块。指针是一个对任何位置的(特定类型的)数据元素的引用。
- 数组自动分配空间,但是不能重分配或改变大小。指针必须被赋值以指向分配的空间(可能使用ma11oc),但是可以随意重新赋值(即指向不同的对象),同时除了表示一个内存块的基址之外,还有许多其他的用途。
- 有3种想法是正确的:(1)指针可以模拟数组(2)几乎没有所谓数组的东西(它毕竟是个“二等公民”),下标操作符[]实际上是个指针操作符(3)从更高的抽象层次来看,指向一块内存的指针本质上也就是一个数组(当然这并没有涉及指针的其他用途)。