|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第11行,*(*p2+i)为啥里面还要加*号呢?*p2+i不就是里面的值了吗?问了一下人是双层指针,实在是不懂
- #include <stdio.h>
- int main(void)
- {
- int temp[5] = {5,22,35,4656,515};
- int (*p2)[5] = &temp;//int (*p2)[5] = temp,指针指向第一个数组元素的地址,实际上指向整型变量的指针
- int i;
-
- for(i=0;i<5;i++)
- {
- printf("%d\n",*(*p2+i));//多取了一次地址,所以p2也要加*号
- }
-
- return 0;
- }
复制代码
本帖最后由 jackz007 于 2019-12-24 01:42 编辑
这一句定义了一个指向末维为 5 的二维整型数组的指针 p2,就是说,p2 完全可以像二维数组那样被访问,例如,执行完上述语句后,p2 和 temp 之间存在如下对应关系:
- p2[0][0] - temp[0]
- p2[0][1] - temp[1]
- . . . . . .
- p2[0][4] - temp[4]
复制代码
如果用指针的形式来表达,对应关系为:
- * ((* p2 + 0) + 0) - temp[0]
- * ((* p2 + 0) + 1) - temp[1]
- . . . . . .
- * ((* p2 + 0) + 4) - temp[4]
复制代码
所以,对于二维数组的指针而言,要访问到数组元素,两层括号是必须的,可以把两层括号理解为多维数组指针 "降维" 。在本例中,由于第一维的索引始终为 0 值,所以,内层括号可以省去。
|
|