vc(6.0)为什么用sizeof算数组的大小比实际的小1

showming 2010-07-17 10:33:04
#include<iostream>
#include<stdio.h>
using namespace std;

void sort(int n[])
{
// for (int i=0;;)
// {
// }
cout<<"size:"<<sizeof(n)<<endl;

for(int i=0;i<=sizeof(n);i++)
{cout<<n[i]<<endl;}


}


void main()
{
int a[]={1,2,3,4,5};
sort(a);

}

输出:size:4
1
2
3
4
5
...全文
268 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2010-07-18
  • 打赏
  • 举报
回复
你要是定义int a[] = { 1, 2, 3, 4, 5, 6, };会发现小2。
cocat 2010-07-17
  • 打赏
  • 举报
回复
sizeof(int),确实退化成指针了
Q446512799 2010-07-17
  • 打赏
  • 举报
回复
有图有真相,sizeof(int)
youkuxiaobin 2010-07-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
函数参数中的数组退化为指针,因此sizeof应该返回4吧
[/Quote]


同意
Qyee 2010-07-17
  • 打赏
  • 举报
回复
是不是指针,调试就可以看到了。
确实是指针。。。看下图
lovemly 2010-07-17
  • 打赏
  • 举报
回复
数组当参数传递时 应该传递的是指针 sizeof(n)其实是该指针的size
nwpulei 2010-07-17
  • 打赏
  • 举报
回复
LZ呀
void sort(int n[])
{
cout<<"size:"<<sizeof(n)<<endl;

数组名!=指针。
sizeof(n)得到的是指针n的大小,而不是数组的长度。
黑娃 2010-07-17
  • 打赏
  • 举报
回复
我也觉得是数组传入函数时退化为指针了
你可以用int a[]={1,2,3,4,5,6,7,8};试试,要是还是4的话就肯定是这个原因了
arong1234 2010-07-17
  • 打赏
  • 举报
回复
这和编译器有关没错,但是是4还是其他值其实不重要,重要的是它和数组实际长度无关[Quote=引用 4 楼 renzhewh 的回复:]
这跟所用系统环境有关吧
在其他编译环境下不一定就是4
[/Quote]
djjlove_2008 2010-07-17
  • 打赏
  • 举报
回复
建议在主函数中sizeof吧,呵呵。
饭fan有引力 2010-07-17
  • 打赏
  • 举报
回复
sizeof是C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数

参见http://baike.baidu.com/view/1078660.htm?fr=ala0_1_1
renzhewh 2010-07-17
  • 打赏
  • 举报
回复
这跟所用系统环境有关吧
在其他编译环境下不一定就是4
饭fan有引力 2010-07-17
  • 打赏
  • 举报
回复
int类型是4个字节,sizeof是得出这个结果的
小楫轻舟 2010-07-17
  • 打赏
  • 举报
回复
不是少1,
是永远都是4
arong1234 2010-07-17
  • 打赏
  • 举报
回复
函数参数中的数组退化为指针,因此sizeof应该返回4吧
zhangquangood 2010-07-17
  • 打赏
  • 举报
回复
#include<iostream>
#include<stdio.h>
using namespace std;

void sort(int n[])
{
cout<<"size:"<<sizeof(n)<<endl;

for(int i=0;i<=sizeof(n);i++)
{cout<<n[i]<<endl;}


}


void main()
{
int a[]={1,2,3,4,5,6};
sort(a);
cout<<sizeof(a)/sizeof(int);
}

确实数组当参数传时会退化成指针
你看在main里调用sizeof的值就不会错
na2650945 2010-07-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lightboat09 的回复:]

不是少1,
是永远都是4
[/Quote]
指针的大小被。
ayw215 2010-07-17
  • 打赏
  • 举报
回复
大家都回答了
我来蹭分
cilluick 2010-07-17
  • 打赏
  • 举报
回复
参数是指针类型的,sizeof计算的只是指针的大小
chengg0769 2010-07-17
  • 打赏
  • 举报
回复
好像要在参数那里直接传递进去sizeof的值。
加载更多回复(2)

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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