这是我的代码:
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中的指针是如何工作的。
答案 0 :(得分:3)
你有一个传递给函数的指针的地址:
array
你想要取消引用来获取指针:
*array
然后将数组下标运算符应用于结果:
(*array)[2]
或等效地:
*((*array) + 2)
括号是必需的,因为数组下标运算符[]
的优先级高于取消引用运算符*
。
一般来说,你应尽可能使用数组下标运算符,因为它往往更容易阅读。