你能向我解釋一下這裏發生了什麼?指針問題
char data[128]; // Create char array of size 128.
long * ptr; // Create a pointer.
ptr = (long *) data; // ??
主要是(長*)是什麼意思?
這是否意味着數據是char類型的,並且我正在將對數據的引用強制轉換爲長引用?
謝謝。
你能向我解釋一下這裏發生了什麼?指針問題
char data[128]; // Create char array of size 128.
long * ptr; // Create a pointer.
ptr = (long *) data; // ??
主要是(長*)是什麼意思?
這是否意味着數據是char類型的,並且我正在將對數據的引用強制轉換爲長引用?
謝謝。
它正在將數據指針作爲指針指向long。
線:
char data[128];
將分配128個字節的存儲器和處理該數據作爲字符。的代碼:
long * ptr;
ptr = (long *) data;
分配一個指針指向一個長,並將該指針在由char data[128];
分配的內存到另一個點。
您可以通過data[x]
來引用此內存,以獲得從此內存塊開始處開始的第x個字符。或者你可以通過ptr[x]
來引用這個內存來獲得這個內存塊開始的第x個長開始。請注意,每個長字佔用的存儲空間比每個字符多。它可能是8個字節 - 所以你可以去data[127]
或ptr[15]
。
(long *)
是一個類型轉換。由於data
是char
的數組,因此需要使用此類型轉換來指定ptr
,這是一個long *
指針。你的「是否意味着」這句話是正確的。
該語句表示獲取數據(這是128個字符的開始的存儲器地址),並將該存儲器地址視爲長數的開始。
這似乎是非常冒險和愚蠢的。
這是有什麼特別的原因嗎?
(long *)
是演員。它告訴編譯器「這裏有你的char[128]
?把它當作long *
」。但是,您將其指定給char *
指針,其中a)是一個無效的賦值,沒有從long *
到char *
轉換,並且b)不會保留該變量的...經度...。
基本上,在這個特殊的例子中沒有意義。我懷疑這是因爲你修改了原來的代碼來顯示在這裏 - 你能告訴我們它的實際外觀嗎?
(long*)
表達式是C風格演員。它處理由data
指向的內存並將其視爲指向數據類型的指針long
它是一個「C風格」類型;在你的情況下,它轉化爲「重新解釋演員」。閱讀它爲「採取一個char
類型的指針,並將其視爲如果它指向long
」。編寫它的首選方式是reinterpret_cast<long>(ptr)
。請注意,有效索引是從0到128 * sizeof(char)/sizeof(long) - 1
,這在平臺之間可能有所不同。
已標記爲已答覆百遍以上 – 2010-09-28 22:26:33