1.
在X86下,有下列程序
#include <stdio.h>
void main()
{
union
{
int k;
char i[2];
}*s,a;
s = &a;
s->i[0] = 0x39;
s->i[1] = 0x38;
printf("%x\n", a.k);
}
输出结果是( )
A) 3839 B) 3938 C) 380039 D) 不可预知
答案:D。对联合中的元素作赋值,但是由于联合在此时是4字节对齐的,不能够确定i的两个元素后是的另外两个字节的内容是什么,所以把这个联合当作K来访问时候,不能够确定k的整体值。
void main( )
{
char *szStr = "abcde";
szStr += 2;
printf("%lu \n",szStr);
return;
}
A cde B 字符c的ASCLL码值
C "abcde"这个常串中字符c所在的地址 D 出错
答案:C