歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 2012搜狗校園招聘筆試題

2012搜狗校園招聘筆試題

日期:2017/2/28 15:30:48   编辑:Linux教程

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

Copyright © Linux教程網 All Rights Reserved