struct (指針題)不能正確輸出hello





















正確答案: B   你的答案: A (錯誤)

struct data3_t *pData=(struct data3_t*)&str; printf("data:%s%s\n",str.data,(char*)(&(pData->data[0])));
struct data2_t *pData=(struct data2_t*)&str; printf("data:%s%s\n",str.data,(char*)(pData->data[0]));
struct data1_t *pData=(struct data1_t*)&str;printf("data:%s%s\n",str.data,(char*)(pData->data));
struct str_t *pData=(struct str_t*)&str; printf("data:%s%s\n",str.data,(char*)(pData->data));
鏈接:https://www.nowcoder.com/questionTerminal/4a4c163af45540a5a39d20db413af1e6
來源:牛客網
這裏面的關鍵是:  “取這個變量的地址”  和  “把變量的值當作地址”  的區別。這題應該  “取變量的地址”
主要是因爲C++中定義了箭頭運算符,箭頭運算符把解引用和成員訪問兩個操作結合在一起,
也就是說it->men 和 (*it).men表達的含義相同,那麼也就是說pData->data[0]實際上指的是數組首元素而不是地址


int main()
{
    char*s[1] = {"dd" };
    cout << *s[0] << endl;
    cout << s[0] << endl;
}

第一個輸出 d,
第二個輸出 dd,

在32位小端的機器上,如下代碼輸出是什麼:

輸出是:
0x201 , 0x605 , 0x807060504030201 , 0x0

小端機器的數據高位字節放在高地址,低位字節放在低地址。
char array[12] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; 
1,char一字節,直觀呈現的結果爲:0x08-07-06-05-04-03-02-01(從後到前下標爲0-7)
2,short兩字節,直觀呈現 的結果 爲: 0x0807-0605-0403-0201 (從後到前 下標 爲0-3) :
*pshort從0開始,所以0x201;
*(pshort+2)從2開始,所以0x605;
3,int64八字節,直觀呈現 的結果 爲 0x0807060504030201 (從後到前 下標 爲0) :
*pint64從0開始,所以0x807060504030201;
4,int四字節,直觀呈現爲0x08070605-04030201(從後到前 下標 爲0-1) :
*(pint+2))從2開始,但是最多隻到下標1,後面位置默認爲0。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章