关于数组做函数形参和sizeof函数

Kennrael 2009-12-23 04:18:45
c语言中数组作函数形参时会把数组当指针看待,那么sizeof(array)时,把数组array传进sizeof函数里,函数里的array也是指针呀,为什么能得到数组的大小呢?
...全文
479 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
macrojj 2009-12-23
  • 打赏
  • 举报
回复
sizeof不是函数

是操作符
clark2009 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 topwork 的回复:]
当sizeof应用在数组上时,它得到的是整个数组所占的空间,因此在主函数中得到3。

而你的函数定义
void foo(const int arr[])
相当于
void foo(const int *arr)
数组都是这么传递的,因此进入函数后,得到的是指针所占的空间,在32位系统正好是32位,和int所占的空间相同,因此进入函数后结果是1。
此外用指针所占的空间,除int所占的空间,没有任何意义。
这个程序在64位系统上,打印的结果将会是:

Output:
in main array size: 3
in foo array size: 2


[/Quote]
说的很详细了,还有疑惑可以看一下林锐的高质量编程。
forster 2009-12-23
  • 打赏
  • 举报
回复
sizeof是关键字。
就像if一样 怎么传参数?
topwork 2009-12-23
  • 打赏
  • 举报
回复
当sizeof应用在数组上时,它得到的是整个数组所占的空间,因此在主函数中得到3。

而你的函数定义
void foo(const int arr[])
相当于
void foo(const int *arr)
数组都是这么传递的,因此进入函数后,得到的是指针所占的空间,在32位系统正好是32位,和int所占的空间相同,因此进入函数后结果是1。
此外用指针所占的空间,除int所占的空间,没有任何意义。
这个程序在64位系统上,打印的结果将会是:

Output:
in main array size: 3
in foo array size: 2

pengzhixi 2009-12-23
  • 打赏
  • 举报
回复
当传递数组给sizeof操作符时,数组不会“退化”为指针,而且数组的大小是编译期就可以确定大小的,这个要和数组传给函数区别开。
pur_e 2009-12-23
  • 打赏
  • 举报
回复
汗,我刚明白LZ的意思
Kennrael 2009-12-23
  • 打赏
  • 举报
回复
数组和指针在做函数形参时是一样吧
aozhi 2009-12-23
  • 打赏
  • 举报
回复
5楼说得很清楚sizeof不是函数,不存在数组参数退化成指针的问题。
pur_e 2009-12-23
  • 打赏
  • 举报
回复
数组和指针不是完全一样的,LZ可以上网去搜一下,举个简单例子,数组int a[],a++是错的,指针int *p,p++是对的

传递给函数时数组会完全退化为指针
Kennrael 2009-12-23
  • 打赏
  • 举报
回复
哦,ms2楼和5楼正解了
Kennrael 2009-12-23
  • 打赏
  • 举报
回复
我的意思是,比如下面一断程序
#include <iostream>
using namespace::std;
void foo(const int[]);
int main()
{
int arr[3] = {1,2,3};
cout<<"in main array size: "<<sizeof(arr)/sizeof(int)<<endl;
foo(arr);
}
void foo(const int arr[])
{
cout<<"in foo array size: "<<sizeof(arr)/sizeof(int)<<endl;
}
Output:
in main array size: 3
in foo array size: 1

数组传进函数foo里,因为传递的是指针,所以不能得到数组大小,那么在主函数里面,数组传进sizeof()函数里,传的也是指针呀,为什么就能得到大小呢?
grpubr 2009-12-23
  • 打赏
  • 举报
回复
sizeof不是函数!
是操作符

The 'sizeof' operator is used to determine the amount of space any data-element/datatype occupies in memory. To use sizeof, the keyword "sizeof" is followed by a type name, variable, or expression.
aozhi 2009-12-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pur_e 的回复:]
编译器给你声明的数组,你用sizeof计算,能不知道大小吗
[/Quote]
错!
你给编译器声明的数组
编译器给你定义的数组
aozhi 2009-12-23
  • 打赏
  • 举报
回复
sizeof得到的是数据区和栈空间的大小。
数组在数据区或栈里因此全部size都可以得到。

杂家杂谈
taodm 2009-12-23
  • 打赏
  • 举报
回复
呃,楼主啊,你的教材是不是实在太差了,sizeof都能被讲成“函数”
pur_e 2009-12-23
  • 打赏
  • 举报
回复
编译器给你声明的数组,你用sizeof计算,能不知道大小吗

69,373

社区成员

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

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