将简单指针作为双指针传递给函数

时间:2019-01-13 17:01:58

标签: c pointers

我必须编写一个程序,将我的编码类的两个向量相乘,并且所实现函数的参数类型由我们的老师设置。

我不知道如何将作为一维数组的向量作为指向已实现函数之一的双指针传递。

我试图使用地址运算符,因为我想指向数组开头的地址,该函数应该在此处为数组保留内存空间。但是编译器总是告诉我

incompatible pointer type, expected int **

,如果没有任何运算符,它也不起作用。

  
//all functions set by worksheet
int array_create(int **v, int n);//function with double pointer argument
void array_init(int *v, int n);
int mult_array(int *x, int *y, int n);

int main(void)
{
    int i, j;
    int x[10];
    int y[10];
    srand(time(NULL));
    array_create(x, 7); // see here
    array_create(y, 7); // see here
    array_init(x, 7);
    array_init(y, 7);
    printf("\nResult: %i", mult_array(x, y, 7));
    array_destroy(x);
    array_destroy(y);
    return 0;
}

int array_create(int **v, int n)
{

    v = malloc(n * sizeof(int));
    if(!v){
        return 0;
    }
    return 1;
}

1 个答案:

答案 0 :(得分:2)

array_create的目标显然是在第一个参数中分配并保存地址,因此将其更改为:

int array_create(int **v, int n)   
{
  *v = malloc(n * sizeof(int));
  if(!*v){
      return 0;
  }
  return 1;
}

您需要以正确的方式致电:

int * x;
int * y;
srand(time(NULL));
array_create(&x, 7);
array_create(&y, 7);
现在,

x y 包含分配的内存块的地址(假设有足够的内存)。尽管array_create返回0或1,但最好测试返回的值;-)。