社区
C语言
帖子详情
关于数组做函数形参和sizeof函数
Kennrael
2009-12-23 04:18:45
c语言中数组作函数形参时会把数组当指针看待,那么sizeof(array)时,把数组array传进sizeof函数里,函数里的array也是指针呀,为什么能得到数组的大小呢?
...全文
479
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计算,能不知道大小吗
如何将一维
数组
作为
函数
形参
来使用
printf("%d\n",
sizeof
(arr)); arr=arr+1; printf("%d\n",*arr); } void func2(int *arr) { printf("%d\n",
sizeof
(arr)); arr=arr+1; printf("%d\n",*arr); } int main() { ...
数组
作为
函数
形参
请看下面的程序: #include <stdio.h> void func1(int arr[]) { printf("%d\n",
sizeof
(arr)); arr=arr+1; printf("%d\n",*arr);} void fun...
《c语言深度解析》第5、6章 制作c库与c标准库、
数组
与字符串
课程内容: 第5章: 库的原理、静态库与动态库、制作静态库和动态库、c库
函数
与OS ... 第6章: 一维
数组
、二维
数组
、三维
数组
、使用malloc开辟多维
数组
、字符串、指针变量/
数组
/字符串与
sizeof
、main
函数
的argc、argv。
一维
数组
作为
函数
形参
使用详解
如何将一维
数组
作为
函数
形参
来使用 请看下面的程序: #include void func1(int arr[]) { printf("%d\n",
sizeof
(arr)); arr=arr+1; printf("%d\n",*arr);
C语言中
数组
作为
函数
的
形参
数组
函数
形参
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章