初始化函数中动态数组的值(C语言)

初始化函数中动态数组的值(C语言),c,arrays,pointers,C,Arrays,Pointers,这是我的代码: void init_array(int** array) { *array = (int*) malloc(3 * sizeof(int)); /* ???? **(array+2) = 666; */ return; } void init(int* array, int* length) { *length = 3; *(array+0) = 0; *(array+1) = 1; *(array+2) = 2; return;

这是我的代码:

void init_array(int** array) {

  *array = (int*) malloc(3 * sizeof(int));

  /* ???? **(array+2) = 666; */

  return;
}

void init(int* array, int* length) {

  *length = 3;

  *(array+0) = 0;
  *(array+1) = 1;
  *(array+2) = 2;

  return;

}

int main(void) {

  /* Variables */

  int array_length;
  int* array;

  /* Initialize */

  init_array(&array);
  init(array, &array_length);

  free(array);

  return 0;

}
我的问题是:如何在函数init_array()中初始化数组的值

我曾尝试过以下事情:

  • **(数组+2)=666
  • *(*(数组+2))=666
  • *数组[2]=666
  • **数组[2]=666
当我使用铅笔和纸时,我得出的结果是
**(array+2)
应该可以工作,但它给了我一个分割错误


如果您能回答我的问题,我将不胜感激,因为我不知道C中的指针实际上是如何工作的。

您已经将指针的地址传递给了函数:

array
要取消引用以获取指针,请执行以下操作:

*array
然后对结果应用数组下标运算符:

(*array)[2]
或相当于:

*((*array) + 2)
括号是必需的,因为数组下标运算符
[]
的优先级高于取消引用运算符
*


一般来说,您应该尽可能使用数组下标运算符,因为它更易于阅读。

尝试
(*array)[2]=666并编译所有警告。我熟悉C++,但我需要使用<代码>新< /Calp>运算符或任何声明对象,然后在指定地址中创建值。C中没有新的。