|
正確答案: 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)); 來源:牛客網 這裏面的關鍵是: “取這個變量的地址” 和 “把變量的值當作地址” 的區別。這題應該 “取變量的地址” 主要是因爲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。
|
struct (指針題)不能正確輸出hello
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.