发信人: xiaoLee ($oftware Engineer), 信区: Job 标 题: Intel笔试题目2 发信站: 武汉白云黄鹤站 (2002年11月19日10:45:41 星期二), 站内信件 发信人: huidog (要多酸,就多酸), 信区: JobAndWork 标 题: [合集]INTEL考题1 发信站: 南京大学小百合站 (Thu Nov 14 00:18:59 2002), 站内信件 Promenader (Promenader) 于Sun Nov 10 21:58:04 2002) 提到: 1。下面的程序是否正确,如正确,给出结果,否则,说明理由。 #include <stdio.h> struct A{ int i; char j; char * ptr; long Array[100]; char b[2]; char * c; }; #define PRINT_ME (char *)&(((struct A *)0)->c) void main() { printf("%d\n", PRINT_ME); } amanofsky (枫丹白露) 于Sun Nov 10 22:01:55 2002) 提到: offset 应该是4+1+4+100*4+2*1 【 在 Promenader 的大作中提到: 】 : : 1。下面的程序是否正确,如正确,给出结果,否则,说明理由。 : #include <stdio.h> : struct A{ : int i; : char j; : char * ptr; : long Array[100]; : char b[2]; : char * c; : }; : #define PRINT_ME (char *)&(((struct A *)0)->c) : void main() : { : printf("%d\n", PRINT_ME); : } seaboy (haha) 于Sun Nov 10 22:10:39 2002提到: 正确,答案是416 【 在 amanofsky (枫丹白露) 的大作中提到: 】 : offset : 应该是4+1+4+100*4+2*1 : : 【 在 Promenader 的大作中提到: 】 : (以下引言省略 ... ...) missllor (忆乐者) 于Sun Nov 10 22:13:30 2002) 提到: 32位机器,int和指针都占4个字节。 【 在 Promenader 的大作中提到: 】 : : 1。下面的程序是否正确,如正确,给出结果,否则,说明理由。 : #include <stdio.h> : struct A{ : int i; : char j; : char * ptr; : long Array[100]; : char b[2]; : char * c; : }; : #define PRINT_ME (char *)&(((struct A *)0)->c) : void main() : { : printf("%d\n", PRINT_ME); : } Promenader (Promenader) 于Sun Nov 10 22:14:52 2002) 提到: 正确答案是416 因为机器字长32,四个字节,按4字节对齐, int占4字节,指针ptr占4个字节,所以“char j”也不得不占4字节了。 以此类推。 结构的大小为4+4+4+4*100+4+4=420 【 在 amanofsky 的大作中提到: 】 : offset : 应该是4+1+4+100*4+2*1 : : 【 在 Promenader 的大作中提到: 】 swayonline (在线飘零) 于Sun Nov 10 22:15:45 2002提到: 但是我试了一下,可以编译通过,但是运行出错,“dereference of null pointer” 【 在 seaboy (haha) 的大作中提到: 】 : 正确,答案是416 : 【 在 amanofsky (枫丹白露) 的大作中提到: 】 amanofsky (枫丹白露) 于Sun Nov 10 22:18:47 2002) 提到: //nod 应该4字节对其。 【 在 Promenader 的大作中提到: 】 : 正确答案是416 : 因为机器字长32,四个字节,按4字节对齐, : int占4字节,指针ptr占4个字节,所以“char j”也不得不占4字节了。 : 以此类推。 : 结构的大小为4+4+4+4*100+4+4=420 : : 【 在 amanofsky 的大作中提到: 】 lzf (一飞) 于Sun Nov 10 22:19:31 2002) 提到: 416? 【 在 Promenader 的大作中提到: 】 : : 1。下面的程序是否正确,如正确,给出结果,否则,说明理由。 : #include <stdio.h> : struct A{ : int i; : char j; : char * ptr; : long Array[100]; : char b[2]; : char * c; : }; : #define PRINT_ME (char *)&(((struct A *)0)->c) : void main() : { : printf("%d\n", PRINT_ME); : } PlugPlay (饲养员何去何从?) 于Sun Nov 10 22:19:53 2002提到: c是一个指针呀,里面的初值什么时候定义了? 我觉得值是随机的。 【 在 Promenader (Promenader) 的大作中提到: 】 : : 1。下面的程序是否正确,如正确,给出结果,否则,说明理由。 : #include <stdio.h> : struct A{ : int i; : char j; : char * ptr; : long Array[100]; : char b[2]; : char * c; : }; : #define PRINT_ME (char *)&(((struct A *)0)->c) : void main() : { : printf("%d\n", PRINT_ME); : } amaranth (恒星) 于Sun Nov 10 22:23:08 2002) 提到: 一般是字边界对齐(双字节),字符所占的空间只有两个字节 4+2+4+100*4+2,可以用sizeof验证一下(我没有验证过) 【 在 Promenader 的大作中提到: 】 : : 1。下面的程序是否正确,如正确,给出结果,否则,说明理由。 : #include <stdio.h> : struct A{ : int i; : char j; : char * ptr; : long Array[100]; : char b[2]; : char * c; : }; : #define PRINT_ME (char *)&(((struct A *)0)->c) : void main() : { : printf("%d\n", PRINT_ME); : } xiling (水水) 于Sun Nov 10 22:23:31 2002提到: 前面不是有一个&吗?是地址的值。 【 在 PlugPlay (饲养员何去何从?) 的大作中提到: 】 : c是一个指针呀,里面的初值什么时候定义了? : 我觉得值是随机的。 : 【 在 Promenader (Promenader) 的大作中提到: 】 ADang (阿当) 于Sun Nov 10 22:24:27 2002提到: 改成单字节对齐,就是411 【 在 Promenader (Promenader) 的大作中提到: 】 : 正确答案是416 : 因为机器字长32,四个字节,按4字节对齐, : int占4字节,指针ptr占4个字节,所以“char j”也不得不占4字节了。 : 以此类推。 : 结构的大小为4+4+4+4*100+4+4=420 : : 【 在 amanofsky 的大作中提到: 】 PlugPlay (饲养员何去何从?) 于Sun Nov 10 22:25:33 2002提到: 学电子的考这个有点吃亏了 【 在 ADang (阿当) 的大作中提到: 】 : 改成单字节对齐,就是411 : 【 在 Promenader (Promenader) 的大作中提到: 】 sculptor (雕塑家) 于Sun Nov 10 22:26:11 2002) 提到: 407用TC2.0编译运行的答案 【 在 amanofsky 的大作中提到: 】 : offset : 应该是4+1+4+100*4+2*1 : : 【 在 Promenader 的大作中提到: 】 amanofsky (枫丹白露) 于Sun Nov 10 22:28:15 2002) 提到: tc里面int难道是2字节? 【 在 sculptor 的大作中提到: 】 : 407用TC2.0编译运行的答案 : 【 在 amanofsky 的大作中提到: 】 asusmb (华硕) 于Sun Nov 10 22:31:41 2002) 提到: 其中的0是什么意思 PlugPlay (饲养员何去何从?) 于Sun Nov 10 22:33:34 2002提到: 0变成地址 【 在 asusmb (华硕) 的大作中提到: 】 : 其中的0是什么意思 darming (原来时间让一切继续) 于Sun Nov 10 22:34:42 2002提到: VC++6.0编译的结果是416 【 在 Promenader (Promenader) 的大作中提到: 】 : : 1。下面的程序是否正确,如正确,给出结果,否则,说明理由。 : #include <stdio.h> : struct A{ : int i; : char j; : char * ptr; : long Array[100]; : char b[2]; : char * c; : }; : #define PRINT_ME (char *)&(((struct A *)0)->c) : void main() : { : printf("%d\n", PRINT_ME); : } seaboy (haha) 于Sun Nov 10 22:48:45 2002提到: 这种题目没什么意思!对齐方式是可以改变的,况且不是每一种编译器都有完全一致的 解释 【 在 ADang (阿当) 的大作中提到: 】 : 改成单字节对齐,就是411 : 【 在 Promenader (Promenader) 的大作中提到: 】 php1 (php) 于Mon Nov 11 10:22:49 2002提到: 32位字节中int占4个字节。结构中字节的存储是按依次的顺序来的,先前i占4字节,接 着是j占一个字节,如果j后定义的变量和j 的类型相同就接着j的地址存储,不同就跳过 未用字符,从下一个存储单位即4字节开始放下面的变量。所以此题为 4+4+4+4*100+4=416, 【 在 Promenader (Promenader) 的大作中提到: 】 : : 1。下面的程序是否正确,如正确,给出结果,否则,说明理由。 : #include <stdio.h> : struct A{ : int i; : char j; : char * ptr; : long Array[100]; : char b[2]; : char * c; : }; : #define PRINT_ME (char *)&(((struct A *)0)->c) : void main() : { : printf("%d\n", PRINT_ME); : } amanofsky (枫丹白露) 于Mon Nov 11 10:31:20 2002) 提到: it depends! Compiler defines how many bytes a INT type is,and byte alang in most of systems,it's 4 bytes. 【 在 php1 的大作中提到: 】 : 32位字节中int占4个字节。结构中字节的存储是按依次的顺序来的,先前i占4字节,. . : 着是j占一个字节,如果j后定义的变量和j 的类型相同就接着j的地址存储,不同就?. : 未用字符,从下一个存储单位即4字节开始放下面的变量。所以此题为 : 4+4+4+4*100+4=416, : 【 在 Promenader (Promenader) 的大作中提到: 】 : (以下引言省略...) -- 屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯