int a[2][2] = {{1, 2}, {3, 4}};
cout << a << endl;
cout << *a << endl;
cout << &a[0][0] << endl;
這段代碼的輸出是:
0x7fff3da96f40
0x7fff3da96f40
0x7fff3da96f40
但是,如果a是0x7fff3da96f40那么*a應該是地址中的值0x7fff3da96f40是1。
但是,我們又得到了相同的地址。
為什么會這樣?
uj5u.com熱心網友回復:
*a應該是地址中的值0x7fff3da96f40
這是。關鍵是該值的型別是什么,該型別是int[2].
cout 不能直接列印陣列,但它可以列印指標,因此您的陣列被隱式轉換為指向其第一個元素的指標,并按原樣列印。
陣列的大多數用途都會進行這種轉換,包括將*和應用[]到陣列。
uj5u.com熱心網友回復:
如果你試試
int a[2][2] = {{1, 2}, {3, 4}};
cout << a << endl;
cout << *a << endl;
cout << &a[0][0] << endl;
cout << typeid(a).name() << endl;
cout << typeid(*a).name() << endl;
cout << typeid(&a[0][0]).name() << endl;
可能的輸出是
0x7ffe4169bb50
0x7ffe4169bb50
0x7ffe4169bb50
A2_A2_i
A2_i
Pi
所以現在你可以看到你正在使用的變數是什么型別。它們是有些不同的物體,從相同的記憶體地址開始。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314966.html
上一篇:為什么char型別指標陣列中的地址wsklan[0]和wsklan[0][0]不同?
下一篇:在C中獲取堆疊的分段錯誤錯誤
