2013-07-26 79 views
1

我與動態數組合作鑄件,這是聲明:警告:賦值時將指針整數,未在陣列

int *vetor = (int *) malloc (tam*sizeof(int)); 

vetorAleatorio (vetor, tam); //chamando função abaixo 

但是當我試圖把它作爲參數給這個函數:

void vetorAleatorio(int **vet, int size) { 
int i; 

for (i=0; i<size; i++) 
     vet[i] = rand() %1000;} 

我有以下錯誤:

[Warning] assignment makes pointer from integer without a cast 
[Warning] passing arg 1 of `vetorAleatorio' from incompatible pointer type 

有人知道這是怎麼發生的?

+2

這只是一個註釋,但是避免在C中使用malloc [source](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc/605858#605858) – CBIII

+0

通常情況下,如果要在函數內分配並在函數外部使用它,則有一個雙指針參數(** vet)。 int * vetor = Null; vetorAlea(&vetor,tam); //在函數中分配.... – Jiminion

+0

但是你必須在C++ Source中輸入malloc .....(嘆氣...) – Jiminion

回答

5

你的函數語法:

void vetorAleatorio(int **vet, int size) 

應該是:

void vetorAleatorio(int *vet, int size) 
         ^
         // remove one * 

【警告】賦值時將整數指針不進行強制轉換

如果使用雙* as int **vet,那麼它的類型不匹配,如下所示:

vet[i] = rand() %1000 
^ ^
    |   int // rand() %1000 returns a int 
type is int* 
// vet[i] == *(vet + i) == *(pointer to pointer of int) = pointer int = int* 

警告-2:傳遞ARG 1 vetorAleatorio的`」從兼容的指針類型

理解您的代碼根據你void vetorAleatorio(int **vet, int size)聲明你正在調用函數的方式是錯誤的:vetorAleatorio (vetor, tam);,你將int =指針的地址傳遞給int,並且參數需要指向int的指針地址=指向int的指針。

您只需要按照上面的建議進行一次整改。

0

vetorAleatorio你的函數簽名是錯誤的 - 變化:

void vetorAleatorio(int **vet, int size) 

到:

void vetorAleatorio(int *vet, int size) 

另外請注意,你不應該用C投malloc的結果,所以改變:

int *vetor = (int *) malloc (tam*sizeof(int)); 

發送至:

int *vetor = malloc (tam*sizeof(int)); 
1

int **vet聲明該vet參數是一個指向的指針int。即整數陣列的陣列。它看起來像你只是想一個指針傳遞給一個矢量,所以你應該聲明的參數類型int*代替

void vetorAleatorio(int *vet, int size) { 
0

vetorint *類型,其中veteroAleatorio期待一個int **

你應該有

void vetorAleatorio(int *vet, int size) { 
int i; 

for (i=0; i<size; i++) 
     vet[i] = rand() %1000;} 
0

您有額外的*。這應該工作:

void vetorAleatorio(int *vet, int size) 

你傳遞一個指針爲int(可變vetor),所以你的函數聲明應該接受一個指向int。

相關問題