1. 選出程序輸出的結果
#include <iostream>
using namespace std;
int main()
{
short input[10]={'A','B','C','D','E'};
unsigned char *p=(unsigned char*)&input;
int s=0;
int temp=sizeof(input);
for(int i=0; i<temp; ++i)
{
char v=p[i];
if(v>0)
s+=v-'A'+i;
}
printf("%d\n",s);
}
答案 :A:10 B:15 C:25 D:30 E:35 F:得到不確定的結果或程序崩潰
這個題目要考慮大小端存儲,關於大小端的介紹請按: http://baike.baidu.com/view/1922338.htm
因爲x86平臺下是小端模式
所以對於input而言,內存如下:
A0B0C0D0E0 0000000000
當強制將內存按照char的方式讀取的時候,i 分別在
0 2 4 6 8 的位置是 非零,然後加上各自對應的值
0 1 2 3 4
所以最後結果是 20 + 10 = 30
對於在大端模式的平臺下:
0A0B0C0D0E 0000000000
這樣組後的結果就是
1 3 5 7 9
0 1 2 3 4
是 25 + 10 = 35
但是題目沒有給出是大端還是小端模式,所以選F
2. 寫出程序的輸出
char *c[] = { "ENTER", "NEW", "POINT", "FIRST" };
char **cp[] = { c+3, c+2, c+1, c };
char ***cpp = cp;
int main(void)
{
printf("%s", **++cpp);
printf("%s", *--*++cpp+3);
printf("%s", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
return 0;
}
指針比較繁瑣,仔細點應該不會有問題,分析如下:
第一個輸出如下:
第二個輸出如下:
第三個輸出如下:
第四個輸出如下:
最後結果:
Pointerstew