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 展开
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 展开
6个回答
展开全部
你好 我来解答一下。
首先你下面两个说法是错误的。
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的型指针而已。
首先你下面两个说法是错误的。
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的型指针而已。
展开全部
内存有没有被使用,都是有标记的,int 数组是连续的空间,从起始地址到结束地址,这段连续的被使用的空间的大小,就是sizeof的结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数形参的数组会自动退化成指针
所以
int sum(int a[])
{
sizeof(a)==sizeof(int*)
}
需要一个额外的参数来传递数组大小
int sun(int a[], int size);
所以
int sum(int a[])
{
sizeof(a)==sizeof(int*)
}
需要一个额外的参数来传递数组大小
int sun(int a[], int size);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sum函数的参数a和主函数里面的a不是一个东西,sum中的a,在栈上分配有4个字
节的内存空间,它是一个指针形的变量,和主函数中的a的唯一的一点关系就是
它的值存的是函数中a数组的地址,既然sum中的a是一个指针,那么sizeof(指
针)肯定是4.
你可以把int sum(int a[]) 写成指针的形式 int sum(int *a)
节的内存空间,它是一个指针形的变量,和主函数中的a的唯一的一点关系就是
它的值存的是函数中a数组的地址,既然sum中的a是一个指针,那么sizeof(指
针)肯定是4.
你可以把int sum(int a[]) 写成指针的形式 int sum(int *a)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组名代表的是整个数组而不只是第一个元素,要不然怎么能叫数组名呢
sizeof能判断出这是一个int数组名,能够计算出这个数组使用的空间的大小
当数组名作为参数传递时,数组名退化为指针,int sum(int a[])
中的a并不是一个数组而是一个指针,虽然形式上看上去像一个数组。这里面sizeof(a)的大小不是一个int的大小,而是一个指针的大小,与int刚好大小相同
sizeof能判断出这是一个int数组名,能够计算出这个数组使用的空间的大小
当数组名作为参数传递时,数组名退化为指针,int sum(int a[])
中的a并不是一个数组而是一个指针,虽然形式上看上去像一个数组。这里面sizeof(a)的大小不是一个int的大小,而是一个指针的大小,与int刚好大小相同
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询