能力值:
( LV2,RANK:10 )
|
-
-
2 楼
学习了
根底不牢固啊,我
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
4 10 100 400 3 4 8 8
应该是这样的吧,指针char好像都是int处理的,struct结构体好像对qi的都是4!字符串后面有一个0,随然不显示,但是它的作用是方便了字符指针!
|
能力值:
(RANK:680 )
|
-
-
4 楼
LS的你选sizeof(s5) = 3, 为啥不选sizeof(s2)=11 ?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
基础知识~主要是指针与数组的异同,还有内存对齐。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我作弊了,告诉你们正确答案.
2,11,100,200,3,2,6,6
|
能力值:
( LV15,RANK:670 )
|
-
-
7 楼
LS的忽悠大大滴
我在处理字符串的时候经常用到 sizeof 运算符 ........
明白了 sizeof 的含义,这些不在话下...
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
内存对齐,视环境而变吧……
|
能力值:
(RANK:680 )
|
-
-
9 楼
6楼的难道还在用DOS系统 ?
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
感谢前辈,前有车后有zhe !祝我实现我今年的目标
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
还真没看出答案是什么
|
能力值:
( LV15,RANK:670 )
|
-
-
12 楼
估计LZ要在第二贴公布答案了
|
能力值:
(RANK:680 )
|
-
-
13 楼
答案还需要楼主公布吗
不清楚的,自己把代码跑一下不就知道了
|
能力值:
( LV15,RANK:670 )
|
-
-
14 楼
神奇的jackozoo又出现了
|
能力值:
(RANK:680 )
|
-
-
15 楼
回个贴都神奇 ?
|
能力值:
( LV4,RANK:50 )
|
-
-
16 楼
4,11,100,200,3,4,6,6(int 占2字节,指针占4字节)
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
按照我自己想的:4 11 100 400 3 4 6 6
我自己跑了一次:4 11 100 400 3 4 6 8
我的确不明白为什么struct B中 long+short=8
LS的.32位系统int 4字节1字节8位 4*8=32,你那是16位的DOS.
short 2位 32位系统long=int
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
内存对齐呀,内存对齐
把结构体B修改为
struct{
[COLOR="Red"]short[/COLOR] a1;
short a2;
}B; 运行查看结果为 2 + 2 = 4,和我们想的一样,再修改为
struct{
[COLOR="Red"]char[/COLOR] a1;
short a2;
}B; 运行,查看结果, 奇怪了吧,怎么不是 1 + 2 呢?因为要实现数据的快速访问,所以数据在内存中最好对齐,这样CPU的运行效率才高,牺牲了内存来换效率。对齐的边界必须是 2 的 n 次方,所以sizeof(B) 就是 1 + 2 + 1.
另外内存对齐是有一个原则的,我就不说出来了,你试试这样改写结构体B,再运行查看结果就明白了,尽在不言中
struct{
[COLOR="Red"]long[/COLOR] a1;
char a2;
}B; 想一想为什么sizeof(B)会是8吧,想明白了就知道这个原则是什么了
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
我来说两句 。 俺也看的不咋明白 哈哈
|
能力值:
( LV10,RANK:170 )
|
-
-
20 楼
没想到此贴这么热闹啊
我面试时考官就给我这道题...
#include <stdio.h>
#include <malloc.h>
struct
{
}A;
struct{
short a1;
short a2;
short a3;
}B;
struct{
long a1;
short a2;
}C;
class D
{
};
class E
{
char a,b;
};
class F
{
static char a;
int b;
};
void main()
{
char *s1 = "0123456789";
char s2[] = "0123456789";
char s3[100] = "0123456789";
int s4[100];
char s5[] = "a\n";
void *s6 = (void*) malloc(100);
s4[0] = 0;
printf("%d\n", sizeof(s1));
printf("%d\n", sizeof(s2));
printf("%d\n", sizeof(s3));
printf("%d\n", sizeof(s4));
printf("%d\n", sizeof(s5));
printf("%d\n", sizeof(s6));
printf("%d\n", sizeof(A));
printf("%d\n", sizeof(B));
printf("%d\n", sizeof(C));
printf("%d\n", sizeof(D));
printf("%d\n", sizeof(E));
printf("%d\n", sizeof(F));
}
这是完整题目 运行在Windows XP下
|
能力值:
( LV15,RANK:670 )
|
-
-
21 楼
编译器是GCC的话貌似 sizeof (A) == 0 ??
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
看了18楼解释,受益了,哈哈
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
汗。。。看不懂 这个语言
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
内存对齐在面试中出现的比较多
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
VS2005下
4 sizeof(指针) = 4
11 多一个'\0' 所以是10 + 1 = 11
100 字符数组 100 × sizeof(char) = 100
400 整数数组 100 × sizeof(int) = 400
3 同第二个 多一个'\0' 2 + 1 = 3
4 同第一个
6 都是short 所以3 × sizeof(short) = 6
8 如果出现了int 结构体的长度要以int为单位 即为int的整数倍 sizeof(int) + sizeof(short) 等于6 显然不够 所以还要补上2个字节 所以为8
具体看看这个 写的很清楚:
http://blog.sina.com.cn/s/blog_60a1a51d0100dz66.html
|
|
|