為什么在列印同一地址中的值時會得到 2 個不同的輸出?
指標 ptr 指向被訪問元素 (bar) 的索引 0。
但是否向我展示了不同的結果?
unsigned int bar[5];
int main(){
unsigned int * ptr = &bar[0];
printf("%lu\n",sizeof(ptr)); // Console output : 8 (bytes)
printf("%lu\n",sizeof(bar[0])); //Console output : 4 (bytes)
return 0;
}
uj5u.com熱心網友回復:
為什么在列印同一地址中的值時會得到 2 個不同的輸出?
這兩種說法
printf("%lu\n",sizeof(ptr)); // Console output : 8 (bytes)
printf("%lu\n",sizeof(bar[0])); //Console output : 4 (bytes)
不要輸出“相同地址中的值”。
第一條陳述句輸出ptr型別為 的指標的大小unsigned int *。該陳述句等價于
printf("%zu\n",sizeof( unsigned int * )); // Console output : 8 (bytes)
第二次呼叫printf輸出型別物件的大小unsigned int。這個呼叫相當于
printf("%zu\n",sizeof( unsigned int ) ); //Console output : 4 (bytes)
如您所見sizeof,這兩個呼叫中帶有運算子的運算式的引數printf是不同的
printf("%zu\n",sizeof( unsigned int * )); // Console output : 8 (bytes)
printf("%zu\n",sizeof( unsigned int ) ); //Console output : 4 (bytes)
如果您將重寫printf例如以下方式的第二次呼叫
printf("%zu\n",sizeof( bar 0 ) ); //Console output : 8 (bytes)
那么您將獲得與第一次呼叫產生的值相同的值,因為運算式bar 0具有型別unsigned int *,這是由于陣列指示符隱式轉換為指向其在此運算式中的第一個元素的指標。
uj5u.com熱心網友回復:
ptr是一個unsigned int *。在那種環境下,這種指標的大小是 8 個位元組。
bar[0]是一個unsigned int。在那個環境中,它的大小是 4 個位元組。
也許你以為你在使用*ptr?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/410134.html
標籤:
