谁能解释一下 int *a[5] 和 int (*a)[5] 的区别?

gaomingok 2012-03-27 11:44:08

int main(int argc, char* argv[])
{

int *a[5];
int (*b)[5];
printf("sizeof(a)=%d,sizeof(b)=%d\n",sizeof(a),sizeof(b));
printf("sizeof(*a)=%d,sizeof(*b)=%d\n",sizeof(*a),sizeof(*b));
system("PAUSE");
return 0;
}

输出结果:
sizeof(a)=20,sizeof(b)=4
sizeof(*a)=4,sizeof(*b)=20
...全文
790 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaomingok 2012-03-28
  • 打赏
  • 举报
回复
学习了,对带括号的定义没什么概念,原来以为都一样呢
developer 2012-03-28
  • 打赏
  • 举报
回复
1楼正解
TMAC10052120353 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yht8708 的回复:]
1.int *a[5]:指针数组。本质是数组。sizeof(a)=20。sizeof计算数组的大小。5个int型即为20.
sizeof(*a)=4。数组元素是指针。*a代表的是一个指针,此求的是int 型指针的大小为4。
2.int (*a)[5]:数组指针。本质是指针。sizeof(b)是求int型指针的大小为4.*b代表是具有5个int型变量的数组,所以sizeof(*b)=20
[/Quote]
yel617 2012-03-28
  • 打赏
  • 举报
回复
学习楼上各位的
1、int *a[5]:指针数组,本质是数组,每个元素都是个指针.
sizeof(a)计算数组的大小,5个int型即为为20.
sizeof(*a)=4,数组元素是指针。*a代表的是一个指针,此求的是int 型指针的大小为4。
2、int (*b)[5]:数组指针,本质是指针,指向一个包含5个元素的数组。
sizeof(b)是求int型指针的大小为4.
*b代表是具有5个int型变量的数组,所以sizeof(*b)=20
如果b++,它将跨过五个整型的长度。
小班得瑞 2012-03-28
  • 打赏
  • 举报
回复
去看书,《C和指针》
m筱米 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sundayx 的回复:]

a是一个数组,每个元素都是个指针。
b是一个指针,指向一个数组
[/Quote]
++
Ever_lover 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 shyb01 的回复:]

引用 4 楼 yht8708 的回复:
1.int *a[5]:指针数组。本质是数组。sizeof(a)=20。sizeof计算数组的大小。5个int型即为20.
sizeof(*a)=4。数组元素是指针。*a代表的是一个指针,此求的是int 型指针的大小为4。
2.int (*a)[5]:数组指针。本质是指针。sizeof(b)是求int型指针的大小为4.*b代表是具有5个int型变量的……
[/Quote]+1
HAHSIYUAN 2012-03-27
  • 打赏
  • 举报
回复
int *a[5];因为[]比*优先级高,所以它首先是一个数组,然后该数组的元素的类型是int *,所以这是一个指针数组;
int (*a)[5];因为()是超脱于优先级之外的,所以它首先是一个指针,然后该指针指向的类型是int [5],即含有5个元素的数组,所以它是一个数组指针,如果a++,它将跨过五个整型的长度。
GoatYangYang 2012-03-27
  • 打赏
  • 举报
回复
5楼正解
pathuang68 2012-03-27
  • 打赏
  • 举报
回复
楼上几位说得很清楚了。
mlinlin 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pengzhixi 的回复:]
int *a[5];//a是一个数组,里面存放的元素类型是int*类型。含有5个元素
int (*b)[5];//b是一个指针,指向的是一个int[5]的数组。
[/Quote]++
pengzhixi 2012-03-27
  • 打赏
  • 举报
回复
int *a[5];//a是一个数组,里面存放的元素类型是int*类型。含有5个元素
int (*b)[5];//b是一个指针,指向的是一个int[5]的数组。
yht8708 2012-03-27
  • 打赏
  • 举报
回复
1.int *a[5]:指针数组。本质是数组。sizeof(a)=20。sizeof计算数组的大小。5个int型即为20.
sizeof(*a)=4。数组元素是指针。*a代表的是一个指针,此求的是int 型指针的大小为4。
2.int (*a)[5]:数组指针。本质是指针。sizeof(b)是求int型指针的大小为4.*b代表是具有5个int型变量的数组,所以sizeof(*b)=20
sundayX 2012-03-27
  • 打赏
  • 举报
回复
a是一个数组,每个元素都是个指针。
b是一个指针,指向一个数组
gold_water 2012-03-27
  • 打赏
  • 举报
回复
1楼正解;更主要的是理解各自的用途。
tandy 2012-03-27
  • 打赏
  • 举报
回复
*a[5] 是指针数组 可以指向5个值

(*a)[5] 是一个指针,但这个指针只能指向包含5个元素的一维数组
shyb01 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yht8708 的回复:]
1.int *a[5]:指针数组。本质是数组。sizeof(a)=20。sizeof计算数组的大小。5个int型即为20.
sizeof(*a)=4。数组元素是指针。*a代表的是一个指针,此求的是int 型指针的大小为4。
2.int (*a)[5]:数组指针。本质是指针。sizeof(b)是求int型指针的大小为4.*b代表是具有5个int型变量的数组,所以sizeof(*b)=20
[/Quote]
个人理解同4楼.
goldbeef 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pathuang68 的回复:]

楼上几位说得很清楚了。
[/Quote]mark
暮雨晨舟 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yht8708 的回复:]
1.int *a[5]:指针数组。本质是数组。sizeof(a)=20。sizeof计算数组的大小。5个int型即为20.
sizeof(*a)=4。数组元素是指针。*a代表的是一个指针,此求的是int 型指针的大小为4。
2.int (*a)[5]:数组指针。本质是指针。sizeof(b)是求int型指针的大小为4.*b代表是具有5个int型变量的数组,所以sizeof(*b)=20
[/Quote]
正解
星爷是我哥 2012-03-27
  • 打赏
  • 举报
回复
百度一下。右左法则。你就明白了。。

69,322

社区成员

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

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