二维数组和指针的地址问题

leecyz 2010-03-04 02:26:00

#include<stdio.h>

void main()
{
int a[3][4] ={1,3,5,7,9,11,13,15,17,19,21,23};

int (*p)[4],i,j;
p = a;
printf("%d\n",sizeof((p)));//4字节
printf("%d\n",sizeof(*(p)));//16字节

}

//个人理解是,*p为a[0],即&a[0][0],为何占16个字节。
//p为0行首地址,确占4个字节,
//输出结果和我的想法相反,请高手们讲解讲解。

...全文
195 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wade_2003 2010-03-06
  • 打赏
  • 举报
回复
引用 7 楼 huanmie_09 的回复:
printf("%d\n",sizeof((p)));//在32位机器上,指针所占字节大小为4.

int (*p)[4],i,j;
p = a;
//注意p是指针数组, *p指向数组的第一行,数组每行有4个int型元素, sizeof(int)=4时,sizeof(*(p))为16.

我觉得应该是这样理解的,多看看数组与指针的关系
xushuai0794 2010-03-05
  • 打赏
  • 举报
回复
结果指向的是整个数组所占用的字节数,当然是16
ah_cgh 2010-03-05
  • 打赏
  • 举报
回复
引用 5 楼 pengzhixi 的回复:
typedef int P_TYPE[4]
P_TYPE *p;
sizeof(p)//4
sizeof(P_TYPE)//16

这个清楚
liuxingjin 2010-03-05
  • 打赏
  • 举报
回复
sizeof(p) =》算出的是p的类型占的大小,指针都占4个字节 =》4
sizeof(*(p))出来的是p指向的空间大小,=》int p[4] =》sizeof(int p[4] )=16
ProgBelief 2010-03-04
  • 打赏
  • 举报
回复
p为指向一维数组int [4]的指针。
解引用后 *p 表示一维数组int [4]本身。
而对数组名使用sizeof,返回整个数组所占用的字节数。
musiclee 2010-03-04
  • 打赏
  • 举报
回复
一个是指针
一个是指针的内容*(解引操作)
cy330206 2010-03-04
  • 打赏
  • 举报
回复
int (*p)[4]
这个是楼主声明的类型;首先分析()里面的东西就知道这个是个指针了(指向哪里),再看[]发现时数组,所以这个指针是指向4个int的数组

printf("%d\n",sizeof((p)));//p是指针
printf("%d\n",sizeof(*(p)));//*(p)指向数组
Happylessness 2010-03-04
  • 打赏
  • 举报
回复
同存储的优先方式相关吧、、、
行有限,列优先。。

菜鸟飘过。。。
huanmie_09 2010-03-04
  • 打赏
  • 举报
回复
打错了,printf("%d\n",sizeof((p)));//在32位机器上,指针所占字节大小为4.
引用 7 楼 huanmie_09 的回复:
printf("%d\n",sizeof((p)));//在32位机器上,指针所占字节大小为8.

int (*p)[4],i,j;
p = a;
//注意p是指针数组, *p指向数组的第一行,数组每行有4个int型元素, sizeof(int)=4时,sizeof(*(p))为16.
huanmie_09 2010-03-04
  • 打赏
  • 举报
回复
printf("%d\n",sizeof((p)));//在32位机器上,指针所占字节大小为8.

int (*p)[4],i,j;
p = a;
//注意p是指针数组, *p指向数组的第一行,数组每行有4个int型元素, sizeof(int)=4时,sizeof(*(p))为16.
leecyz 2010-03-04
  • 打赏
  • 举报
回复
引用 3 楼 stardust20 的回复:
sizeof((p))算的是指针大小。。。所以为4
sizeof(*(p)));算的是指针的第一维。。指向一个int[4]所以为4*4

printf("%d\n",sizeof(*(p)+0));
理解了,这样使用就是4个字节了。少加了一个0
pengzhixi 2010-03-04
  • 打赏
  • 举报
回复
typedef int P_TYPE[4]
P_TYPE *p;
sizeof(p)//4
sizeof(P_TYPE)//16
baihacker 2010-03-04
  • 打赏
  • 举报
回复
//个人理解是,*p为a[0],即&a[0][0],为何占16个字节。

a[0]是一个数组撒。。。
虽然数组在一些场景会作为指向该数组的第一个元素的指针用,但是很不幸,你遇到了不这样用的情况。

另外不要把数组和指针等同了。
stardust20 2010-03-04
  • 打赏
  • 举报
回复
sizeof((p))算的是指针大小。。。所以为4
sizeof(*(p)));算的是指针的第一维。。指向一个int[4]所以为4*4
pengzhixi 2010-03-04
  • 打赏
  • 举报
回复
你可以理解p的类型为int [4]
pengzhixi 2010-03-04
  • 打赏
  • 举报
回复
p是指向int[4]所以sizeof(*p)的大小是4*4

69,369

社区成员

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

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