首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于指针数组,该如何处理

2012-04-03 
关于指针数组这么一道题:已知,int a[3][4],(*p)[4]下列的赋值表达式中正确的是()A、p a + 2B、p a[1]C

关于指针数组
这么一道题:
已知,int a[3][4],(*p)[4];
下列的赋值表达式中正确的是()
A、p = a + 2
B、p = a[1];
C、p = *a
D、p = *a +2
我知道对的为什么对,但是不能明白错的为什么错,希望可以得到指教,先谢谢了!

[解决办法]
答案:A ...


数组名就是代表一个数组.数组名可以隐式转换成首元素的指针(指针不是地址!!!)

数组与指针
http://topic.csdn.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html?91173

其实在C数组都是一维的..


int arr[3];
arr 是数组名,可以隐式转换成首元素的指针,这时元素类型是int,所以可以转换成int*
int* p = arr;//正确.
int*p = &arr[0];//与上面效果一样.

int arr2[3][2];
arr2 是数组名,可以隐式转换成首元素的指针,这时元素类型是int [2];//是一个一维数组.所以可以转换成int(*)[2];//指向数组的指针.

int (*p)[2]=arr2;//正确.
int (*p)[2] = &arr2[0];//与上面效果一样.

[解决办法]
引用:
你对于*arr是怎么理解的?



*arr;//很明显,数组本身是不存在*(解引用)操作的.于是数组转换成首元素的指针,再被解引用.

*(arr + 0)//这样写也是一样的.不过这里是因为加法操作而转换成指针.


实际上,除了在sizeof(),和&操作之外,其他情况都会转换成指针.

你试试:
int arr[3];
sizeof(arr);
int * p = &arr;//错;
int (*P)[3] = &arr;//对/


对于二维数组:

int arr[3][2];
*arr;//这里跟上面一样,转换成首元素指针,于是*arr表示int [2]数组.

试试:sizeof(*arr) == 8;
int (*)[2] = &*arr ;

**arr;//之所以可以这么写是因为上面转换成来的 int [2];数组还可以再次转换成首元素指针.再次被解引用,实际上这样更直观 *(*arr);

数组名绝不不是就是指针.二维数组名更不是就是二维指针,详见我上面的链接....

热点排行