发布网友 发布时间:2024-10-21 17:32
共2个回答
热心网友 时间:7分钟前
问题1:temp可以理解为指向数组的指针,这个数组中存放的是int型的指针,其实所谓的指针都可以理解为地址,例如int a = 0 ;int *p=&a;那么p就是一个整形指针,p的实际值就是a在内存中的位置。
假如 int temp[3][3]={{0,1,2}{3,4,5}{6,7,8}},那么整个数组在内存中的大概样子如下图所示:
问题2:temp不是二维指针,*(temp+2)取出了p3的值,*(*(temp+2)+3)相当于*(p3+3),也就是数组p3的第四个元素值。
引出问题1:不等价,int *p,那么p是指向int型的指针,int(*p)[1],那么p是指向整形数组的指针,类似于temp。
引出问题2:你说得对,不过temp是const int ** 类型,int (*p)[n]都可以和int (*p)[5]同样类型,只是非const。
热心网友 时间:8分钟前
定义一个指针变量:int *p;其实它等价与:int (*p)[1];都是指向一个int类型的数据!
不, 这两个定义不等效, 指针类型不一样, 第一个p指向int, 第二个p指向地址
定义一个数组指针:int (*p)[5],那么指针变量p与temp数组名的类型才是完全匹配的。
只能说访问元素时语法一样, 本质实现上是有很大差异的: 第一个数组可以放5个指针, 第二个数组可以放25个整数. 第一个定义的内存开销是5*4字节, 第二个定义是5*5*4字节.