现在的位置: 首页 > 综合 > 正文

数组和指针

2013年10月11日 ⁄ 综合 ⁄ 共 796字 ⁄ 字号 评论关闭

记录整理一些在阅读《征服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是什么?上面已经定义了!

可以这样赋值:(*array[i])[j] ='a';



抱歉!评论已关闭.