社区
C语言
帖子详情
关于数组做函数形参和sizeof函数
Kennrael
2009-12-23 04:18:45
c语言中数组作函数形参时会把数组当指针看待,那么sizeof(array)时,把数组array传进sizeof函数里,函数里的array也是指针呀,为什么能得到数组的大小呢?
...全文
647
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语言第 115 天」当你选择了一种语言,意味着你还选择了一组技术、一个社区。——Joshua BlochC语言中
函数
形参
和实参是十分重要的概念,初学者很容易混淆。
形参
:顾名思义,形式参数,仅仅是声明了参数的类型和参数名称,未实际分配内存和赋值。实参:实际参数,是指
函数
调用时,实际赋值和分配内存空间。例如:intsum(inta,intb){ return a+...
漫步IOS--
数组
、
sizeof
和
函数
形参
首先声明,该系列博客记录的重点是C、OBject-C(以后简称OC)相对于Java的不同,还有一些我在编码练习过程中遇到的问题还有解决方法,而并不是一份流水式的完全的学习笔记。还有一些内容是C和OC中特有的东西等。 一、
数组
在C中
数组
的定义只有一种语法: 类型 名称[大小] 例如 : int Arr[10];没有第二种定义方法,对于他的赋值是和Java一样的。 二、
一维
数组
作为
函数
形参
使用详解
如何将一维
数组
作为
函数
形参
来使用 请看下面的程序: #include void func1(int arr[]) { printf("%d\n",
sizeof
(arr)); arr=arr+1; printf("%d\n",*arr);
C语言中
sizeof
测量
形参
中
数组
的长度
在C语言中,若我们在主
函数
中定义了一个
数组
,并给
数组
赋予了初值,在之后,若有
函数
需要调用,且需要用到该
数组
的长度,该怎么来操作。 在下面的代码中定义了一个
数组
,在main
函数
中用
sizeof
函数
来计算
数组
的长度,得到的是
数组
的实际长度,在这里输出的是7,如下代码所示: #include<stdio.h> void uppercase(char *str) { printf("%d\n",
sizeof
(str)); //输出的结果是4 for(int i=0; i<
sizeof
(s
数组
作为
形参
的
sizeof
问题
切记:
数组
作为
形参
,退化为指针,
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章