关于**p这样的指针的问题

[复制链接]
查看11 | 回复2 | 2009-8-4 11:24:08 | 显示全部楼层 |阅读模式
int (*pw)[2]=a;//int (*pw)[2];pw[3] = a[3];这样就好理解了pw指向a第0行的首地址pw+1 指向a第1行的首地址pw+2 指向a第2行的首地址*(pw+2)指向 a第2行第0个元素的地址**(pw+2) = a[2][0]=50*(pw+2)+1指向 a第2行第1个元素的地址*(*(pw+2)+1)= a[2][1] = 60*pw指向a第0行第0个元素的地址**pw+2 = a[0][0]+2 =12*pw+2 指向a第0行第2个元素的地址因为2维数组在内存中存放方式是按行连续存放的一维数组所以 第0行第2个元素 就是第1行第0个元素(*pw+2)+1也就指向第1行第1个元素*((*pw+2)+1)=a[1][1]=40
回复

使用道具 举报

千问 | 2009-8-4 11:24:08 | 显示全部楼层
50126040 你第3个printf写错了 应该是: printf("*(*(pw+2)+1),%d\n",*(*(pw+2)+1));
回复

使用道具 举报

千问 | 2009-8-4 11:24:08 | 显示全部楼层
显示: **(pw+2),50
**pw+2,12
//原题中,想打印的值是不是写错了?
//我改成了这个:
//printf("*(*(pw+2)+1),%d\n",*(*(pw+2)+1));
*(*(pw+2)+1),60
*((*pw+2)+1),40a[0][0] = 10, a[0][1] = 20 ,依次类推int (*pw)[2]=a; // 将数组a首地址赋值给pw
// pw 是指向 a数组的第二维
// 这样,**pw 实际上就等于 a[0][0]**(pw+2)是将a数组第二维地址指向a[2][0] = 50**pw+2 = a[0][0] + 2 = 12*(*(pw+2)+1) 即先将指针指向a数组第二维下标为2,第一维下标为1即a[2][1]=60*((*pw+2)+1)*pw表明指针指向第二维下标为0,然后,先+2,再+1,即a[1][1]=40
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行