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:得到不確定的結果或程序崩潰
這個題目要考慮大小端存儲,因為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 90 1 2 3 4是 25 + 10 = 35但是題目沒有給出是大端還是小端模式,所以選F2. 寫出程序的輸出
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