注册 登录
编程论坛 C++教室

sizeof 的问题

jhkyy 发布于 2011-04-22 14:38, 587 次点击
程序代码:
#include <iostream>
using namespace std;
void Foo ( char str[100]);
int main()
{
    char a[100]="dfkdshkfihjf";
    Foo(a);
    return 0;


}
void Foo ( char str[100])
{
    cout<<sizeof(str)<<endl;   
}
为什么结果为 4 能详细解释一下哇,谢谢了
8 回复
#2
lintaoyn2011-04-22 14:46
a是数组名,你现在就理解成a是一个特殊的指针(不能修改a的值),它指向一段大小为sizeof(char)*100的内存的首地址。
费话就么多就一个意思,a是一个特殊指针,指针的大小就是4个字节。(编译器为64位的系统产生的代码中的指针就应该是8个字节)
#3
mm1010220cs2011-04-22 15:11
2L说的很细啊
char str[100]
sizeof(str)计算的是数组首地址的长度,地址为int型,所以是4
#4
jhkyy2011-04-22 16:36
知道了,谢谢了!!
#5
stranger552011-04-25 22:50
其实这个问题 不是2,3楼那样说的。
楼主 若在main函数中
定义字符数组后面添加代码 cout<<sizeof(a)<<endl;

#include <iostream>
using namespace std;
void Foo ( char str[100]);
int main()
{
    char a[100]="dfkdshkfihjf";
    cout<<sizeof(a)<<endl;//此处为添加代码处
    Foo(a);
    return 0;
}
void Foo ( char str[100])
{
    cout<<sizeof(str)<<endl;   
}
运行结果将会是 100
                4
为什么了  这里我们得了解 sizeof()
                                1。若对指针进行操作,则将会返回存放指针所需的内存空间
                                2. 若对数组进行操作,则会返回整个数组在内存中的存储长度
而 sizeof(a)实质是对数组进行操作,char的所需的内存空间为1 这里定义的数组大小为100.所以返回的是100;
但是若想返回4 其实这里可以进行显示类型转换 sizeof((char*)a);
而为什么函数里面返回的是4 呢,那是因为 指定数组形参其实有三种方法,
                                 1.void Foo ( char str[100]);
                                 2.void Foo ( char str[]) ;
                                 3.void Foo ( char *str);
而三种定义方法都是等价的,且形参类型都是 int*
所以在这里 进行sizeof(a)其实是对指针进行操作。所以返回的是4;
#6
lintaoyn2011-04-26 07:03
回复 5楼 stranger55
这分应该给你的。
#7
pangding2011-04-26 10:00
嗯。建议楼主看看5楼的解释,以修正自己错误的认识~~
#8
top_dada2011-04-27 09:31
5楼基础很扎。。~~挺5楼~
#9
jhkyy2011-05-05 11:07
回复 5楼 stranger55
多谢解答!!
1