【发布时间】:2018-03-09 17:43:10
【问题描述】:
我分配内存如下。还试图在另一个函数中更新它。
int main() {
int* ptr = (int*)malloc(sizeof(int)*3);
ptr[0] = 0;
ptr[1] = 1;
ptr[2] = 2;
modifyArr(&ptr, 2);
}
void modifyArr(int** arr, int arrLen)
{
printf("Before modified\n");
printArray(*arr, arrLen);
for (int i = arrLen; i >= 0; i--)
{
*arr[i] = i; // here is error
}
printf("After modified\n");
printArray(*arr, arrLen);
}
那么我怎样才能在另一个函数中修改这个数组呢?
如果我的数组被固定为:
int arr[] = { 0,1,2 };
如何在另一个函数中更新它?
【问题讨论】:
-
您要修改数组内容,还是要重新分配数组(以便更改其大小)?您正在将指针传递给指针,这允许您执行后者(更改值
ptr以指向重新分配的缓冲区)。如果你只是想改变数组内容,传递指针值就足够了。 -
*arr[i]不会做你想做的事。可能使用(*arr)[i]。 -
您的指针比您需要的多一级。只需调用
modifyArr(ptr, 2);并声明modifyArr(int *arr, int arrLen)并编写printArray(arr, arrLen)、arr[i] = i等...在这种情况下,您还需要更改printArray声明/定义。 -
ptr已经是一个指针了,你不需要做一个指向它的指针,直接传过去就行了。那么你就不用担心运算符的优先级了。