2010-09-28 116 views
2

你能向我解釋一下這裏發生了什麼?指針問題

char data[128]; // Create char array of size 128. 
long * ptr;  // Create a pointer. 
ptr = (long *) data; // ?? 

主要是(長*)是什麼意思?

這是否意味着數據是char類型的,並且我正在將對數據的引用強制轉換爲長引用?

謝謝。

+0

已標記爲已答覆百遍以上 – 2010-09-28 22:26:33

回答

0

它正在將數據指針作爲指針指向long。

線:

char data[128]; 

將分配128個字節的存儲器和處理該數據作爲字符。的代碼:

long * ptr; 
ptr = (long *) data; 

分配一個指針指向一個長,並將該指針在由char data[128];分配的內存到另一個點。

您可以通過data[x]來引用此內存,以獲得從此內存塊開始處開始的第x個字符。或者你可以通過ptr[x]來引用這個內存來獲得這個內存塊開始的第x個長開始。請注意,每個長字佔用的存儲空間比每個字符多。它可能是8個字節 - 所以你可以去data[127]ptr[15]

0

(long *)是一個類型轉換。由於datachar的數組,因此需要使用此類型轉換來指定ptr,這是一個long *指針。你的「是否意味着」這句話是正確的。

0

該語句表示獲取數據(這是128個字符的開始的存儲器地址),並將該存儲器地址視爲長數的開始。

這似乎是非常冒險和愚蠢的。

這是有什麼特別的原因嗎?

0

(long *)是演員。它告訴編譯器「這裏有你的char[128]?把它當作long *」。但是,您將其指定給char *指針,其中a)是一個無效的賦值,沒有從long *char *轉換,並且b)不會保留該變量的...經度...。

基本上,在這個特殊的例子中沒有意義。我懷疑這是因爲你修改了原來的代碼來顯示在這裏 - 你能告訴我們它的實際外觀嗎?

3

(long*)表達式是C風格演員。它處理由data指向的內存並將其視爲指向數據類型的指針long

1

它是一個「C風格」類型;在你的情況下,它轉化爲「重新解釋演員」。閱讀它爲「採取一個char類型的指針,並將其視爲如果它指向long」。編寫它的首選方式是reinterpret_cast<long>(ptr)。請注意,有效索引是從0到128 * sizeof(char)/sizeof(long) - 1,這在平臺之間可能有所不同。