Chinaunix
标题:
help!一个面试题
[打印本页]
作者:
julynada
时间:
2010-05-31 21:34
标题:
help!一个面试题
本帖最后由 julynada 于 2010-06-20 13:24 编辑
char str[]="12345";
char *p;
p=str;
printf( "%d\n", sizeof(str) );
printf( "%d\n", sizeof(p) );
复制代码
为什么这两个输出不一样?一个是6,一个是4?
抱歉,写漏了sizeof
作者:
rain_fish
时间:
2010-05-31 21:59
char str[]="12345";
char *p;
p=str;
printf( "%d\n", sizeof(str) );
printf( "%d\n", sizeof(p) );
复制代码
作者:
rain_fish
时间:
2010-05-31 21:59
是不是应该是这个啊,lz
作者:
rain_fish
时间:
2010-05-31 22:01
str是个项数是6的数组(包括结尾的\0),相当于 char str[6] = {...},sizeof计算的是这个变量占用的空间,自然是6
p是个指针,sizeof就是这个指针占用的空间,你的os应该是32位的,自然是4字节
作者:
Magic_LP
时间:
2010-05-31 23:09
楼主的这个问题描述有问题吧,这样打印的话都是地址,值应该是一样的
作者:
danbz520
时间:
2010-06-01 00:53
应该是2L说的那样吧,要不都是打印地址。
作者:
empty141
时间:
2010-06-01 08:29
是不是跟编译器有关,我的机器上输出下面这样:
-1079325584
-1079325584
作者:
liwangli1983
时间:
2010-06-01 08:50
地址应该是一样的,不过要是sizeof的话楼主应该能看出来吧,也许出错题了?
作者:
shmild
时间:
2010-06-01 09:10
必须是sizeof
作者:
mgqw
时间:
2010-06-01 10:47
明显是sizeof
作者:
l2y3n2
时间:
2010-06-01 11:30
这个……sizeof都能忘记打?
作者:
liexusong
时间:
2010-06-01 11:32
同意rain_fish!
作者:
ps1987
时间:
2010-06-01 13:22
应该是sizeof。。。
作者:
acer1025
时间:
2010-06-01 15:25
回复
7#
empty141
你在运行次,结果还会变。输出的是内存地址。
作者:
rain_fish
时间:
2010-06-01 17:09
回复
1#
julynada
lz这样做不对啊,大家这么热心的回复,而你发完贴就不在来看了,不合适吧。。
作者:
julynada
时间:
2010-06-20 13:22
我错了。是漏了sizeof
作者:
ubuntuer
时间:
2010-06-20 13:34
指针在32位机上都是4 byte的
作者:
slackware12
时间:
2010-06-20 17:37
数组和指针是两个不同的概念。
数组是派生类型, 指针是object type.
sizeof(str) , 得到的值是数组str的大小。
sizeof(p), 则是对象p的大小。
虽然str 和 p 的地址是相同的, 但不代表str的类型和 p 的类型是相同的。
作者:
etoux
时间:
2010-06-20 22:25
4楼正解
作者:
zqy1005
时间:
2010-06-22 14:40
sizeof的问题有什么好争议的???
作者:
suavelee
时间:
2010-06-23 08:57
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2