关于指向多维数组的指针变量问题

rwle 2004-04-02 04:41:17
#include <iostream.h>
void main()
{int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*p1)[4]=a;
for (int i=0;i<3;i++,p1++)
cout<<*(*p1+i)<<' ';
}
这是书上的一段程序
执行后结果是:1 6 11
我看了半天也没明白过来,(*p1)[4]=a;代表着什么意思,这时*p1指向什么?p1中的内容是什么?
p1++应该是指向下一行的首地址,那p1+i;呢?
*p1+i;又是什么意思?
*(*p1+i);是什么?
我整个头都大了,被搞的迷迷糊糊的,还请各位大大帮帮我理清头绪.
...全文
1378 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rwle 2004-04-08
  • 打赏
  • 举报
回复
因为某些原因我在外地,几天没来上网,所以忘了来结帖子,还请见谅,多谢各位给予帮助,感激不尽
dot99 2004-04-03
  • 打赏
  • 举报
回复
*pl当然结果是一个DWORD,是一个地址而已
pl++是对指针操作,在C/C++编译器里面对指针类型的++作了处理
他的操作是pl += sizeof(type)
(*pl)++是对地址的值操作
也就是内存地址加1个字节
**pl就是a[][]的首地址的值啊,当然是1

这样看
pl是指向a[][]的指针
*pl是a[0][4]的开始地址(另外一个指向一维数组的指针)
**pl是a[0][0]的值

也可以把
(*pl)[]看作指针数组
就是一个数组里面存放的是指针
pl不就是这个数组名字,C\C++里面数组名字就代表这个数组的地址
*pl是这个数组的第一个元素,也就是另外一个指针(用pll表示)
对这个指针进行*运算,*(pll),就取出了pll的地址代表的值
rwle 2004-04-02
  • 打赏
  • 举报
回复
我又修改了几次程序,发现
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int (*p1)[4]=a;
cout<<*p1<<' '<<p1;
结果是0x0012FEA8 0x0012FEA8
p1++和p1+1都可以指向下一行的首地址,而使用(*P1)++就会出现错误,
若将最后一句改成cout<<**p1;
则结果是1,何解,头又再次巨大.
qlyfe 2004-04-02
  • 打赏
  • 举报
回复
因为*p是指向一维数组的指针,所以每P++一次都是加上一个一维数组的大小
楼主应该就是这里搞不明白吧
hatecoding 2004-04-02
  • 打赏
  • 举报
回复
int (*pl)[4]整数指针数组
*pl指向a,即*pl = a

注意你程序中i++ pl++两个都加了
dot99 2004-04-02
  • 打赏
  • 举报
回复
pl是一个pointer to array[4]的指针
让这个指针指向a[][]首地址
注意
是(*pl)+i,不是*(pl+i)
*pl是每行array的首地址
那么(*pl)+i,就是每行array的第i个元素的地址
外面再加个*(at address符号)就是pl行,i元素地址的内容

that's all

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧