Chinaunix

标题: help!一个面试题 [打印本页]

作者: julynada    时间: 2010-05-31 21:34
标题: help!一个面试题
本帖最后由 julynada 于 2010-06-20 13:24 编辑
  1. char str[]="12345";
  2. char *p;
  3. p=str;
  4. printf( "%d\n", sizeof(str) );
  5. printf( "%d\n", sizeof(p) );
复制代码
为什么这两个输出不一样?一个是6,一个是4?

抱歉,写漏了sizeof
作者: rain_fish    时间: 2010-05-31 21:59
  1.         char str[]="12345";
  2.         char *p;
  3.         p=str;
  4.         printf( "%d\n", sizeof(str) );
  5.         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