2013-09-22 15 views
0

C noob here。在運行時聲明數組時,我已經看到了兩種方法。有人能解釋第二個(int *)表演嗎?爲數組動態分配內存(在C中)時,(int *)類型轉換會執行什麼操作?

// first way 
int numberElements = 5; 
int *pointer = malloc(numberElements * sizeof(int)); 

// second way 
... 
int *pointer = (int *)malloc(numberElements * sizeof(int)); 

我只是沒有看到(int *)轉換正在做什麼。首先配置,陣列可以像這樣填充...

// first way cont. 
... 
for (int i = 0; i < numberElements; i += 1){ 
    pointer[i] = 0;\ 
} 

這是不是真的第二?你有什麼不同的做法?

+0

你不應該。請參閱http://stackoverflow.com/q/605845/1009479 –

+0

「(int *)演員做什麼?」它表明誰寫這個,有一個C++背景;-) – dasblinkenlight

回答

3

演員什麼也沒做。一個void指針可以被分配給任何指針而沒有顯式的轉換。

AND you shouldn't。 C99(或C90,C11)標準不需要演員。

+0

也不C90或C11。 –

0

的malloc()的返回類型是一個void *

因此,當它被分配它需要被轉換成int *

做(INT *)做到這一點明確。如果沒有完成,它由編譯器隱式完成。

指針是一個指針,它只是編譯器試圖爲您提供類型安全性,而且完全沒有任何影響。對於某些具有特定標誌的編譯器,如果顯式(int *)強制轉換不存在,您將收到警告。實際生成的編譯代碼在兩種情況下都完全相同。

就像米奇說的那樣,它什麼都沒做。

+0

結果需要*轉換*,而不是轉換爲'int *'。 「cast」是一個明確的運算符,由括號中的類型名組成。 'int * ptr = malloc(...);''將'void *'結果轉換爲'int *'而不需要轉換,即隱式轉換。 –

+0

@KeithThompson好點,編輯回答。 –

相關問題