指针和数组的区别是什么?
其实数组是一个地址,指针则是指向地址的地址。
举个例子:
char array[10];
char *pt;
pt=array;
char array[10];的含义是,在内存里开辟一个10个字节的空间用来存放数据,其中array是这个空间的头地址,正如刚才所说,数组是一个地址。
char *pt;的含义是,只是定义一个指针pt,这个指针可以指向任意char型的地址,而指向的地址则存放在地址*pt中,也就是刚才说的指针是指向地址的地址。
那么好,pt=array;的意思就是我们把*pt中存放的地址(指针)指向了数组array[10]的头地址array,这个时候pt和array辩证的统一了,区别用通俗的话说就是数组是地名,指针是路牌。但是别忘了,在这个例子中,数组实实在在的占用了10个字节的空间,而指针只占用了4个字节用来存放地址而已(假设是32bits系统)。
最后我们总结一下区别:
数组:保存数据;直接访问数据;用于存储数目固定且类型相同的数据;由编译器自动分配和删除;自身即为数据名。
指针:保存地址;间接访问数据(先取得指针的内容,然后以它为地址,取得数据);通常用于动态数据结构;动态的分配和删除;通常指向隐式数据。