[英]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.