一个c/C++语言的问题关于数组

我在main.c里面main函数里有一个数组a[]={1,2,3,4,5}在main()里面引用到另外一个源文件sourc.c里面的一个函数fun(inta[]);这时,... 我在main.c里面main函数里有一个数组a[]={1,2,3,4,5}
在main()里面引用到另外一个源文件sourc.c里面的一个函数fun(int a[]);
这时,sizeof(a)/sizeof(a[0])=5;(这时sizeof(a)应该是20?)

可是在fun(int a[])里面计算sizeof(a)=4,即
fun(int a[])
{
int b;
b=sizeof(a);
printf("%d",b);
}
结果b为4;这是为什么?
展开
 我来答
weida爱问
2012-04-02 · TA获得超过2427个赞
知道小有建树答主
回答量:1345
采纳率:72%
帮助的人:900万
展开全部
这个,,你要理解 C语言参数传递的机制,,,在Main函数里,a表示一个数组,你sizeof(a),也就是该数组的大小,所以是4*5=20个字节; 而fun(int a[]),这表示把一个数组传递给该子函数,这里的a只是代表这整个数组的首地址,,相当于int *a;所以传递的是一个整形指针,所以sizeof(a)就是4,因为指针变量只占4个字节!
巨之说
2012-04-02 · 大学计算机老师,专注于程序设计教学。
巨之说
采纳数:88 获赞数:335

向TA提问 私信TA
展开全部
因为在函数fun(int a[])里面的形参数组int a[]实质上是一个指针变量,即等价于fun(int *a)。此时,只能将主函数中数组a的首地址传到fun函数,而不能传递数组元素个数。
因此在函数fun里边,用sizeof算出来的是指针变量的字节数,跟main函数中数组a的字节数无关。
一般设置第二个参数,专门传送数组元素的个数。例如,fun(int a[],int n)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
AyonA333
2012-04-02 · TA获得超过609个赞
知道小有建树答主
回答量:965
采纳率:0%
帮助的人:509万
展开全部
int 类型的 sizeof(int)=4;
sizeof本身不是函数;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liuk804
2012-04-02
知道答主
回答量:31
采纳率:0%
帮助的人:23.5万
展开全部
fun(int a[])
{
int b;
b=sizeof(a); // a 是数组地址。
printf("%d",b);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式