社区
C语言
帖子详情
*p[4]与(*p)[4]的迷惑;
gnimgnot
2006-06-14 07:20:15
最近一直在学着理解指针与数组名
但还总是搞混;
例如让一个指针指向一个二维数组
int a[3][4];
int (*p)[4]=a;/*这个是定义的一个一维数组,怎么指向一个二维数组的呢*/
int *p[4];/*这个是书上的指向数组的指针,这个应该怎么实现呢?*/
...全文
494
12
打赏
收藏
*p[4]与(*p)[4]的迷惑;
最近一直在学着理解指针与数组名 但还总是搞混; 例如让一个指针指向一个二维数组 int a[3][4]; int (*p)[4]=a;/*这个是定义的一个一维数组,怎么指向一个二维数组的呢*/ int *p[4];/*这个是书上的指向数组的指针,这个应该怎么实现呢?*/
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
c++ *p++ (*p)++ ++(*p)详细实战解读
确实
迷惑
性比较强,而且一查资料,各种各样说法不一,容易让人云里雾里。因此,本文结合代码,给一个最准确详细的解释。 1.正确的结论 我们先上准确的结论: *p++: 返回的是指针p指向的值。如果p是数组,则为数组的...
c语言 char *p 数组p,关于:char (*p)[10] 、char p[10]和char *p[10]的讨论
发现自己C语言基础有漏洞,果断和大家讨论下:直观理解:1. char(*p)[10] 是指向数组的指针...指向数组的指针char(*p)[10] 中,p指向的是一个10个char大小的数组,p+1 和 p 的差距是 sizeof(char p [10]),p+1已指到...
关于:char (*p)[10] 、char p[10]和char *p[10]的讨论
1. char(*p)[10] 是指向数组的指针。 2. char p [10]是一个数组p。 3. char *p [10] 是指针数组,数组元素是char *指针。 具体的不同点: 1.指向数组的指针 char(*p)[10] 中,p指向的是一个10...
int * const p 与int const *p或者const int *p的区别
const是C语言中的常量关键字对于上面的用法就有点让人
迷惑
了。 本文全部使用的C-Free进行编译。 1. int const *p; 或者 const int *p;int const *p; const int *p;这两种形式是一样的,表示的是*p是常量指针,即...
C语言--解析int *p[n]和int (*p)[n]
相信在学C语言的小伙伴都对数组和指针的关系有点
迷惑
,特别是当两者结合在一起时,今天我就带大家来分析一下C语言中int *p[n]和int (*p)[n]以及int *p()和int (*p)(),帮助大家更好地掌握数组和指针。 首先 ...
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章