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

时间:2017-05-24 14:49:08

标签: 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;

}

int main(void) {

  /* Variables */

  int array_length;
  int* array;

  /* Initialize */

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

  free(array);

  return 0;

}

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

我尝试过以下的事情:

  • **(array+2) = 666;
  • *(*(array+2)) = 666;
  • *array[2] = 666;
  • **array[2] = 666;

当我使用铅笔和纸张时,我得出结果**(array+2)应该有效,但它给我一个分段错误。

我很感激你的回答,因为我很困惑C中的指针是如何工作的。

1 个答案:

答案 0 :(得分:3)

你有一个传递给函数的指针的地址:

array

你想要取消引用来获取指针:

*array

然后将数组下标运算符应用于结果:

(*array)[2]

或等效地:

*((*array) + 2)

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

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