*p[4]与(*p)[4]的迷惑;

gnimgnot 2006-06-14 07:20:15
最近一直在学着理解指针与数组名
但还总是搞混;
例如让一个指针指向一个二维数组
int a[3][4];
int (*p)[4]=a;/*这个是定义的一个一维数组,怎么指向一个二维数组的呢*/
int *p[4];/*这个是书上的指向数组的指针,这个应该怎么实现呢?*/
...全文
494 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gnimgnot 2006-06-17
  • 打赏
  • 举报
回复
在int *p[4]中,p是数组名
*p又是什么呢?
而p和&p的值居然相同。。。

并且
int *p[3] = {a[0], a[1], a[2]};
这种初始化被报错
Z_Wing 2006-06-16
  • 打赏
  • 举报
回复
int *p[4]中的p是一个数组名,这个数组的元素是指向int类型对象的指针。注意这里的p不是指针,数组名与指针是不同的。
-------
就是一个指针数组。


int *p[3] = {a[0], a[1], a[2]}; //三个元素, 每个元素为一个指针.

可不可以指向不同的数组呢?
---------------------
不对。这里*p[3]是指针数组,不是数组指针。p是指针数组的首地址而不是一个指针。所以p是不能指向其它数组的。但是你可以给这个指针数组的元素赋不同的值。
gnimgnot 2006-06-15
  • 打赏
  • 举报
回复
抱歉,此贴无赏分
gnimgnot 2006-06-15
  • 打赏
  • 举报
回复
感谢楼上各位的热心解答
我恰好昨天也看到了一本书上说世界上只有一维数组。
而只是元素也可能是数组。

不过还是有一些细节不是很理解
按照以下两位朋友的说法
megaboy(飞天御剑流之杀神一刀斩),sinkileu(小心)

int *p[4]中的p是一个数组名,这个数组的元素是指向int类型对象的指针。注意这里的p不是指针,数组名与指针是不同的。

这就是指针的数组吗?


int *p[3] = {a[0], a[1], a[2]}; //三个元素, 每个元素为一个指针.

可不可以指向不同的数组呢?

sinkileu 2006-06-14
  • 打赏
  • 举报
回复
基本同意megaboy(飞天御剑流之杀神一刀斩),
另外, 赋值应该这样:
int a[3][4] = {. . .};
int (*p)[4] = a; //(*p)为一个含4个元素的数组
int *p[3] = {a[0], a[1], a[2]}; //三个元素, 每个元素为一个指针.
Z_Wing 2006-06-14
  • 打赏
  • 举报
回复
int a[3][4];
int (*p)[4]=a;/*这个是定义的一个一维数组,怎么指向一个二维数组的呢*/

先借用megaboy(飞天御剑流之杀神一刀斩) 的解释,int (*p)[4]中的p是一个指针,指向的对象是一个具有4个int类型元素的一维数组。
为了方便,你可以把int a[3][4]分解成两个数组理解,a[3]代表一个一维数组,而这个数组里的每个元素又是一个有四个元素的一维数组。那么,a[3]中每个元素存的就是每个有四个元素的一维数组的首地址了。那么当然可以用一个指向一维数组的指针p指向它们。这里p = a其实就是指向了第一个一维数组的首地址,不信你可以用p = a[0]来代替。对p的操作,就是对a[3]这个存数组首地址的一维数组操作,例如p+1指向了第二个数组的首地址。
如果你看了二维数组在内存中的存放规则就会很清楚了,例如p+1跳过了16个字节的内存空间,等等。

oosky2004 2006-06-14
  • 打赏
  • 举报
回复
Mark
hemiya 2006-06-14
  • 打赏
  • 举报
回复
同意megaboy(飞天御剑流之杀神一刀斩)
在int (*p)[4]中p是一个地址。在c中数组明就是一个数组的起始地址。
所以下面的方法,取得p的值都是一样的。
int (*p)[4]=a;
int (*p)[4]=&a[0][0];
megaboy 2006-06-14
  • 打赏
  • 举报
回复
全错。



int (*p)[4]中的p是一个指针,指向的对象是一个具有4个int类型元素的一维数组;
int *p[4]中的p是一个数组名,这个数组的元素是指向int类型对象的指针。注意这里的p不是指针,数组名与指针是不同的。
sharpdew 2006-06-14
  • 打赏
  • 举报
回复
在(*p)[4]中p是一个指向一个一维数组名的指针,而一维数组名也代表一个指针,所以它也就是一个指向指针的指针,也就可以指向一个二维数组。
极速小王子 2006-06-14
  • 打赏
  • 举报
回复
p数组本来就是指针,起元素指向一个地址或数组,有什么关系呢?
吃狼的豆腐 2006-06-14
  • 打赏
  • 举报
回复
mark

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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