sizeof解释

我的职业是看店铺的 2012-02-13 09:33:17

char str[] = "world";
cout << sizeof(str) << ": ";
char *p = str;
cout << sizeof(p) << ": ";
char i = 10;
cout << sizeof(i) << ": ";
void *pp = malloc(10);
cout << sizeof(p) << endl;

上面这段代码运行的结果是6 4 1 4 我想知道是如何求出这个结果来的!
...全文
4301 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
redlong8 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 merlinfang 的回复:]
char str[] = "world";
cout << sizeof(str) << ": "; //数组占用的内存长度
char *p = str;
cout << sizeof(p) << ": "; //指针占用的内存长度
char i = 10;
cout << sizeof(i) << ": "; ……
[/Quote]
这个真详细
zmkkobe 2012-02-23
  • 打赏
  • 举报
回复
呵呵,正解比较多,哈哈
紫心剑 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 abigbadboy 的回复:]
C/C++ code

char str[] = "world";
cout << sizeof(str) << ": ";
char *p = str;
cout << sizeof(p) << ": ";
char i = 10;
cout << sizeof(i) << ": ";
void ……
[/Quote]
正解
yuezhiren 2012-02-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/yuezhiren/article/details/7183739
tinki 2012-02-20
  • 打赏
  • 举报
回复
相见不会怀念,这种问题其实输入易犯问题类。
dq 2012-02-19
  • 打赏
  • 举报
回复
还以为是文章呢
副组长 2012-02-19
  • 打赏
  • 举报
回复
sizeof是操作符!是Operator,不是预编译指令。
既然是操作符,就有操作数 Operand ,这个操作数可以是声明的类型或者定义的对象,求字节数。
char str[] = "World";
int n = sizeof(str);
这里 n 为 6,是对对象求字节,C串加一个0在后面,所以是6。

char*p = "World";
int m = sizeof(p);
这里m就是4,别觉得奇怪,这是一个指针,只不过指向一个字符串常量,这一行实际上有两个内存对象,一个是指针,一个是串本身。

int u = sizeof(WORD);
这一行 u 为2,求类型占字节数。这个好理解

typedef struct _MYSTRU {
char b1;
short b2;
}MYSTRU;
int v = sizeof(MYSTRU);
这里v为4,别看你自定义类型里面只有3字节。有内存对齐。

MYSTRU mb[10];
int w = sizeof(mb);
w是40,也不是30。

big_worker 2012-02-18
  • 打赏
  • 举报
回复
数组名是指整个数组的名字。。。可以看看《c语言深度解剖》,里面有详解
jiandingzhe 2012-02-18
  • 打赏
  • 举报
回复
分别是['W','o','r','l','d',0], char*, char, void*的大小。
xhao014 2012-02-17
  • 打赏
  • 举报
回复
都回答的是正解,这个要掌握好。
sjg20010414 2012-02-17
  • 打赏
  • 举报
回复
前面说的足够理解这个问题了。关键还是理解sizeof是编译时确定的东西,即它是给编译器看的,编译器负责如何解释它。它并不是一个运行时的东西。
风来我也来 2012-02-17
  • 打赏
  • 举报
回复
sizeof计算内存空间大小。因为\0是真是存储在内存里面的所以会算到。
strlen因为是针对字符串,所以他能识别出 \0 。所以它可以选择性的忽略它,实际上编译器也是这么干的。
以上是C++。
不清楚35楼说的 c 语言是否是这种情况。个人感觉35楼不是看错了,是记错了。
唐门问心 2012-02-17
  • 打赏
  • 举报
回复
一楼正确。还是要学好基础知识!
aimsgmiss 2012-02-17
  • 打赏
  • 举报
回复
感谢了学了点东西哦;
嵌入式农民 2012-02-16
  • 打赏
  • 举报
回复
为什么在《c陷阱与缺陷》中提到sizeof计算字符数组时不计算'\0'?是我看错了?
lonko 2012-02-15
  • 打赏
  • 举报
回复
10楼正解,反汇编之后也可以看到,预编译阶段已经将sizeof的值解出来了。
maxiao001 2012-02-15
  • 打赏
  • 举报
回复
一楼正解,递归之,同意一楼的也是正解。
月光的护城河 2012-02-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 cxsjabcabc 的回复:]
只要记住2点:
如果是指针,那么sizeof(p)的值是指针的大小,假设一般为4;
如果是数组了,那么sizeof(arr)是数组数据占用内存的大小,如果是char数组,sizeof(arr) == strlen(arr) + 1
[/Quote]
是这样
wjky_2014 2012-02-15
  • 打赏
  • 举报
回复
一楼正确!
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jzxsasch 的回复:]

楼上的抄程序员面试宝典吗
[/Quote]

不是,是在网上看到,输出的4个数字
我只猜对了开头和中间,但是猜不对结局!(经典对白)
加载更多回复(27)

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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