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 

誰かがこれがどのように起こっているか知っていますか?

4

5 に答える 5

5

関数の構文:

void vetorAleatorio(int **vet, int size) 

次のようにする必要があります。

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

[警告]割り当ては、キャストなしで整数からポインターを作成します

に対してdouble を使用する*と 、次のように型が一致しません。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:互換性のないポインター型から vetorAleatorio の arg 1 を渡しています

あなたのコードvoid vetorAleatorio(int **vet, int size)では、関数を間違った方法で呼び出している宣言に従って理解してください: vetorAleatorio (vetor, tam);、int のアドレス = int へのポインターを渡しています。引数には、int へのポインターのアドレス = ポインターへのポインターへのポインターが必要です。

上で提案したように、修正が1つだけ必要です。

于 2013-07-26T15:51:00.077 に答える
1

int **vetvet引数が へのポインタへのポインタであることを宣言しますint。つまり、整数の配列の配列です。単一のベクトルへのポインターを渡したいだけのように見えるので、int*代わりに引数を型として宣言する必要があります

void vetorAleatorio(int *vet, int size) {
于 2013-07-26T15:51:10.747 に答える
0

関数の署名vetorAleatorioが間違っています - 変更してください:

void vetorAleatorio(int **vet, int size)

に:

void vetorAleatorio(int *vet, int size)

mallocまた、Cの結果を決してキャストしてはならないことに注意してください。次のように変更します。

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

に:

int *vetor = malloc (tam*sizeof(int));
于 2013-07-26T15:51:07.883 に答える
0

vetorはタイプint *であり、veteroAleatorioは期待しているint **

あなたが持っている必要があります

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

 for (i=0; i<size; i++)
       vet[i] = rand() %1000;}
于 2013-07-26T15:51:49.347 に答える
0

余分な があり*ます。これはうまくいくはずです:

void vetorAleatorio(int *vet, int size)

int (変数) へのポインターを渡しているvetorため、関数宣言は int へのポインターを受け入れる必要があります。

于 2013-07-26T15:52:26.973 に答える