数组和指针

来源:互联网 发布:这么私密在淘宝买东西 编辑:程序博客网 时间:2024/06/07 15:14

记录整理一些在阅读《征服C指针》过程中的感想。


1 关于数组和数组指针


char array1[2];       //定义一个数组,包含了2个char元素

char (*array2)[2];  //定义一个数组指针,这个指针指向的数组是一个包含了2个元素的数组


另外:

(1)数组名称array其实代表了数组首元素的地址,即&array[0],而&array代表的其实是整体数组地址。所以,array+1和&array+1所移动的距离是不一样的,前者是一个字节,后者是2个字节。

(2)看看这样的代码:

char array1[2];

char (*array2)[2];

array2 = array1;  //错误,cannot convert from 'char [2]' to 'char (*)[2]'

ayyay2 = &array;  //正确,为什么?&array代表了一个包含2个元素的数组,而array代表的是&array[0]。

array2 = new char[2]; //错误,cannot convert from 'char *' to 'char (*)[2]'。new返回的只是一个指针,而指针并不会包含区域大小信心,所以把它赋值给array2就会造成类型不匹配。

(3)array[i]其实是*(array+i)的语法糖。实际上[]和数组之间并不存在任何关系。


2 关于这样一个数组的一个声明:

char (*array[5])[2];

其实是定义了一个数组指针,这个指针指向一个数组,这个数组包含了5个元素,每个元素又是另一个2维数组。是不是很绕口?如果这样写就很明白了:

typedef char POINT[2]; //定义一个包含2个元素的数组的别名

POINT (*array)[5];//定义一个数组,包含了5个元素,每个元素的类型是什么?是POINT,POINT是什么?上面已经定义了!



原创粉丝点击