簡體   English   中英

將 int 轉換為 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)ptr2120

每行分析行:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM