社区
C语言
帖子详情
关于数组做函数形参和sizeof函数
Kennrael
2009-12-23 04:18:45
c语言中数组作函数形参时会把数组当指针看待,那么sizeof(array)时,把数组array传进sizeof函数里,函数里的array也是指针呀,为什么能得到数组的大小呢?
...全文
622
16
打赏
收藏
关于数组做函数形参和sizeof函数
c语言中数组作函数形参时会把数组当指针看待,那么sizeof(array)时,把数组array传进sizeof函数里,函数里的array也是指针呀,为什么能得到数组的大小呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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计算,能不知道大小吗
c语言
sizeof
用法_必须知道的C语言知识细节:
函数
形参
和实参的区别
本文深入解析C语言中
形参
与实参的概念,包括它们的定义、值传递原理、内存分配和调用时的行为。理解这对编程至关重要,不容忽视。
漫步IOS--
数组
、
sizeof
和
函数
形参
本文探讨了C语言中如何使用`
sizeof
`运算符获取
数组
的大小,特别是强调在
函数
中通过
形参
传递
数组
时,`
sizeof
`会返回指针的大小而非
数组
的实际长度。通过对`sA`
数组
的`
sizeof
`运算,可以得到
数组
元素的个数。然而,当
数组
作为
函数
形参
时,使用`
sizeof
`操作会遇到问题。
一维
数组
作为
函数
形参
使用详解
本文详细解释了如何在C语言中将一维
数组
作为
函数
的
形参
,包括实参与
形参
的关系,以及如何通过改变
形参
来影响实参。文章深入探讨了
数组
名作为指针的特性,以及在
函数
调用过程中的内存共享与影响。通过实例代码,清晰展示了C语言中
数组
作为
形参
传递的机制与注意事项。
C语言中
sizeof
测量
形参
中
数组
的长度
本文详细解析了在C语言中如何正确地计算
数组
长度,尤其是在
函数
调用中。通过实例对比了直接使用
sizeof
运算符在不同上下文中的差异,以及如何在
函数
间准确传递
数组
长度。
数组
作为
形参
的
sizeof
问题
本文通过一个具体的示例解释了为什么在C/C++中当
数组
作为
函数
参数传递时,不能直接使用
sizeof
运算符来获取其长度。这是因为
数组
退化成了指针,导致
sizeof
运算符返回的是指针的大小而非
数组
的实际大小。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章