2010-09-29 111 views
3

我所遇到一條線,下面字符指針初始化

  char *ch=(char*)3000 

我想知道這行的意義給予.....

+0

然而,3000可能是不好的,爲了成功編譯,該行在結尾處肯定需要一個分號:) – Arun 2010-09-30 00:47:20

回答

0

這不是很明顯嗎?

將數值「3000」轉換爲字符指針,即ch被初始化爲存儲器地址3000(十進制)。

+2

...這是你可能不想做的事情。 – gspr 2010-09-29 13:47:28

9

它看起來像指針ch被分配了一個絕對內存地址3000.通常是一個非常糟糕的主意,除非你正在使用嵌入式系統而沒有分頁,並且你知道正好是什麼是內存位置3000 。

+2

作爲對這一答案的補充的一種支持:將您的系統內存視爲一系列大量的籃子 - 在現代計算機上數十億個籃子。如果不知道什麼更多關於什麼在籃子裏,您說「ch應該意味籃子數字三千」。你可能會猜到,除非你有一個非常具體的計劃,否則這不是一個好主意。 – gspr 2010-09-29 13:51:19

+0

Win32 DDK中至少有一種情況需要根據調用的函數的其他參數將整數轉換爲指針。每當我不得不打電話時,它都讓我尖叫起來。 – mkb 2010-09-29 13:52:11

+0

任何內核空間代碼都足以經常看到這種事情。但是,十進制3000確實看起來可疑。 – DevSolar 2010-09-29 14:46:16

0

AFAIK,3000沒有特殊的地址/值,在大多數情況下訪問它會導致分段錯誤或垃圾值。

如果您在代碼中看到該代碼,可能會錯誤地使用該代碼而不是(void *),例如在映射中存在鍵值對的情況下,可能會將結果轉換爲整數。

1

也許看到代碼的其餘部分是有關...

該指針可能是相對於它駐留(英特爾處理器)。在這種情況下,3000可能只是該程序段中定義的那個段的索引,在那裏我們沒有這些行。

這取決於系統架構,環境,操作系統,編譯器,其他代碼(和程序員......)。