歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

2012搜狗校園招聘筆試題

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