簡體   English   中英

(數據類型*)0的含義是什么

[英]What is the meaning of (data type*)0

我經歷過sizeof運算符等效

size_t size = (size_t)(1 + ((X*)0));

但是無法理解(int*)0 or (int*)1000的含義。

告訴編譯器什么? 為什么要添加一個? 您能否詳細說明一下。

(int *)0表示“將0當作整數的地址”。 將其加1可獲得內存中“下一個”整數的地址。 因此,將結果轉換回整數可以得到整數的大小。

但是,這依賴於未定義的行為 ,因此您不應使用它。

這只會創建一個指向地址0的指針。向其添加1不會在指針上遞增。 這具有將地址與數據類型的大小提前的效果。 在該示例中,size將包含類X的大小,因為指針將向前擴展類X的大小,並且初始指針值為零。

了解(int*)0(int*)1000的含義。

這些只是強制轉換,與此處的第二行完全相同:

int a = 25;
short b = (short)a;

通過將a強制轉換為short可以將值分配給b (類型為short (int*)0是一樣的-您只是告訴編譯器將0視為指向int的指針。

關於強制轉換的事情是,您實際上是在告訴編譯器:“看,我知道我在這里做什么,所以請照我說的去做,不要再抱怨類型不匹配了。” 這意味着您確實需要知道自己在做什么,以及最終代碼中的效果。 包含(int*)1000類的表達式的任何代碼都可能會(a)高度懷疑,並且(b)非常依賴於編譯器和編寫該代碼的平台的詳細信息。 在某種嵌入式系統中這可能很有意義,因為您可以完全控制整個系統,因此在該情況下您肯定知道內存位置1000將會是什么。 通常,您應該避免這樣的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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