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 *as int **for 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 的指针的地址 = 指向 int 的指针。

您只需要按照我上面的建议进行一次整改。

于 2013-07-26T15:51:00.077 回答
1

int **vet声明vet参数是指向 的指针的指针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)

另请注意,您永远不应将结果转换为mallocC,因此请更改:

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 回答