c++数组,sizeof()函数的问题

inta[]={22.99.34.66.89};sizeof(a)得到的结果是20数组名a只是数组第一个元素的地址为什么sizeof()根据数组第一个元素的地址就可以得到... int a[]={22.99.34.66.89};
sizeof(a) 得到的结果是20
数组名a只是数组第一个元素的地址
为什么sizeof()根据数组第一个元素的地址就可以得到整个数组的大小
那请问:
#include<iostream>
using namespace std;
int sum(int[]);
int main()
{
int a[]={22,99,34,66,89};

cout<<"数组a所有元素相加的和为:"<<sum(a)<<endl;

return 0;
}
int sum(int a[])
{
int sum=0;
int size=sizeof(a)/sizeof(int);
for(int i=0;i<size;i++)
{
sum+=a[i];
}
return sum;
}

为什么把sizeof放在函数中求不出数组的大小啊?
这里的sizeof(a)的值是4,求出的元素个数size是1
展开
 我来答
阿晨c6b7a
推荐于2016-11-05 · 超过22用户采纳过TA的回答
知道答主
回答量:59
采纳率:100%
帮助的人:23.1万
展开全部
你好 我来解答一下。

首先你下面两个说法是错误的。

1.数组名a只是数组第一个元素的地址

数组名a只是和数组第一个元素的地址的值相同而已,
两者类型是不一样的。比如说一个long b=10,和short c = 10。

2.为什么sizeof()根据数组第一个元素的地址就可以得到整个数组的大小?

sizeof()是不能根据数组第一个元素的地址就可以得到整个数组的大小的,
只能从数组名a才能得到,你可以试一下sizeof( &a[0] ),它的结果绝对
不是整个数组的大小。

总结一下:sizeof函数是根据参数的类型算出size的,并不是根据参数的值。
比如 long b = 10; short c = 10; sizeof(b) 与 sizeof(c)绝对
不等。
还有就是你混淆了数组名的概念,你例子中的a是一个数组的名称
不能简单的等同于&a[0],编译器会根据你声明的元素个数来分配
数组a,a中有整个数组的信息。
至于为什么sum(int a[])中求不到main中的数组大小,因为在sum函数中看到的
只是输入参数int a[],它并不是一个数组的类型(即使你在[]中写入数字也
会被无视的!)其实和 sum(int *a)的函数宣言是一样的,参数类型只是简单
的int的型指针而已。
百度网友8bf4721dd
2010-04-22 · TA获得超过514个赞
知道小有建树答主
回答量:378
采纳率:0%
帮助的人:380万
展开全部
内存有没有被使用,都是有标记的,int 数组是连续的空间,从起始地址到结束地址,这段连续的被使用的空间的大小,就是sizeof的结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
43072
2010-04-22 · 超过31用户采纳过TA的回答
知道答主
回答量:145
采纳率:0%
帮助的人:0
展开全部
函数形参的数组会自动退化成指针
所以
int sum(int a[])
{
sizeof(a)==sizeof(int*)
}
需要一个额外的参数来传递数组大小
int sun(int a[], int size);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wn541200
2010-04-22 · TA获得超过500个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:305万
展开全部
sum函数的参数a和主函数里面的a不是一个东西,sum中的a,在栈上分配有4个字

节的内存空间,它是一个指针形的变量,和主函数中的a的唯一的一点关系就是

它的值存的是函数中a数组的地址,既然sum中的a是一个指针,那么sizeof(指

针)肯定是4.

你可以把int sum(int a[]) 写成指针的形式 int sum(int *a)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5803c9a
2010-04-22 · TA获得超过2162个赞
知道小有建树答主
回答量:891
采纳率:0%
帮助的人:1239万
展开全部
数组名代表的是整个数组而不只是第一个元素,要不然怎么能叫数组名呢

sizeof能判断出这是一个int数组名,能够计算出这个数组使用的空间的大小

当数组名作为参数传递时,数组名退化为指针,int sum(int a[])
中的a并不是一个数组而是一个指针,虽然形式上看上去像一个数组。这里面sizeof(a)的大小不是一个int的大小,而是一个指针的大小,与int刚好大小相同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式