【发布时间】:2017-02-06 21:35:20
【问题描述】:
如果我有一个 int 数组:
int *array;
array = malloc(5 * sizeof(int));
然后我像上面一样对其进行 malloc,然后我可以访问它并为其设置值。一切都很好。
但是如果我创建该 int 指针并将其传递给一个函数并在函数中进行 malloc inside,我将无法访问/设置数组的值 除非我将它作为指向指针的指针传递给数组?
some_void_function(int *array) {
array = malloc(5 * sizeof(int))
}
int *array;
some_void_function(array);
*(array + 3) = 5; // DOES NOT WORK
要修复它,我可以让数组接受 (int **array) 作为参数并传入指针的地址(因此是指向指针的指针),取消引用它,然后用 malloc 分配它:
some_void_function(int **array) {
*array = malloc(5 * sizeof(int))
}
int *array;
some_void_function(&array);
*(array + 3) = 5; // WORKS
有人可以向我解释一下吗?在这两种情况下我不是在做同样的事情吗?传递地址然后只是取消引用它与首先传递单个指针是一样的吗?
【问题讨论】:
-
如果不是,怎么可能是一样的呢?通过调用
some_void_function(array);,您不会修改array,因为它是按值传递的。