![](/img/trans.png)
[英]What happens when a short int[] is automatically cast to long int[]?
[英]What happens when you cast an int to an int*?
int val{ 100 };
int* ptr1 = (int*)val;
int* ptr2 = ptr1 + 5;
std::cout << ptr2 << '\n' << (int)ptr2 << std::endl;
在此代碼示例中, (int*)val
的結果是00000064
,但我不明白為什么。 我也不明白為什么(int)ptr2
是120
。
每行分析行:
int* ptr1 = (int*)val;
將十進制值100
分配給指針ptr1
;
int* ptr2 = ptr1 + 5;
此指令調用未定義的行為,僅在數組上下文中允許對指針進行代數運算。
std::cout << ptr2 << '\n' << (int)ptr2 << std::endl;
由於先前未定義的行為,該指令可以打印所有內容。
(int*)val
的結果是00000064
因為是十進制值100
的十六進制表示法
一步步:
int* ptr1 = (int*)val;
執行此指令后,ptr1 的十進制值為 100(十六進制為 00000064)。
int* ptr2 = ptr1 + 5;
現在 ptr2 與 ptr1 具有相同的 memory 地址,移動了 5 個單位。 它移動了 5 *(4 字節)= 20 字節。 ptr2表示的memory地址為(00000078)這就是(int)ptr2為120(100+20)的原因。
這種推理能說得通嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.