這個問題在這里已經有了答案: 將無符號字符陣列轉換為整數 1 個答案 昨天關門。
#include <stdio.h>
int main(){
char p[5] = "ABCD";
int* ip = (int *)p;
printf("%d \n", *(ip 0)); // 1145258561
printf("%d \n", ip); // 6422016
}
有人可以向我解釋一下這個程式的輸出嗎?
uj5u.com熱心網友回復:
在這里,您將char[4], p, 轉換為 anint*并使用結果進行初始化ip:
int* ip = (int *)p;
在這里你取消參考ip,因為它int*意味著它將從地址點讀取sizeof(int)位元組以形成一個:intip
printf("%d \n", *(ip 0)); // 1145258561
由于ints 通常是 4 個位元組,因此它通常看起來可以作業,但它違反了嚴格的別名規則并導致未定義的行為。此外,如果 anint為 8 個位元組,則程式將具有未定義的行為,因為它會在char[4].
在這里,您將 的值列印ip為int,但它是一個指標,因此再次,程式將具有未定義的行為。此外,指標通常為 8 個位元組,因此它也可能會導致未定義的行為。
printf("%d \n", ip); // 6422016
要正確列印指標,請使用%p并將指標轉換為void*:
printf("%p\n", (void*) ip);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/496564.html
上一篇:為什么要在鏈表中宣告指標?
