在另一个函数中使用 realloc 和指向指针的指针

问题描述 投票:0回答:2

我试图在这个程序中使用 realloc 来增加数组的大小,使用指针到指针。但它最终并没有完成任务:

#include <stdio.h>

void push(int** data)
{
    *data = (int *)realloc(*data, 5 * sizeof(int));
    *data[4]=100;
}

int main() {
int *array = (int *)malloc(2 * sizeof(int));

push(&array);

printf("%d", array[4]);

free(array);
return 0;
}

我不想使用全局变量作为数组,我希望直接对数组进行更改。我该怎么办?

c pointers realloc pointer-to-pointer
2个回答
0
投票

问题在于运算符优先级。你需要

(*data)[4] = 100;

让您的程序将

100
分配给新分配的内存中的第四个
int

正如您在运算符优先级表中看到的,

[]
位于
*
之前(解除引用)。


0
投票

这条线并不符合你的想法:

*data[4]=100;

数组下标运算符的优先级高于一元解引用运算符。所以上面和这个是一样的:

*(data[4])=100;

这不是你想要的。您需要括号首先取消引用指针,然后为数组添加下标。

 (*data)[4]=100;
© www.soinside.com 2019 - 2024. All rights reserved.