gpt4 book ai didi

c - 指向指针取消引用的指针

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:12 24 4
gpt4 key购买 nike

我正在学习 C 语言,实际上停在了一些可能很明显的问题上。

void allocateArray(int **arr, int size, int value) {
*arr = (int*)malloc(size * sizeof(int));
if(*arr != NULL) {
for(int i=0; i<size; i++) {
*(*arr+i) = value;
}
}
}

来电者:

int *vector = NULL;
allocateArray(&vector,5,45);

这是来自理解和使用 C 指针的代码。问题是我无法想象这条线是如何工作的:

*(*arr+i) = value;

更准确地说,我不知道为什么我们需要使用 2 个解引用星而不是只写 (*arr+i) = value;

如果能得到一些更好的例子来说明它是如何以及为什么应该是这样的,那就太好了。

最佳答案

I don't know why we need to use 2 dereferencing stars instead of just writing (*arr+i) = value;

由于 arr 是指向 int 的指针,*arr+1 是指向 int< 的指针。您需要一个双指针,以便您可以从函数调用内部更改变量的值。

一般规则是如果你需要在一个函数中改变一个sometype类型的变量,你需要将sometype*传递给函数,并使用一个额外的星号里面做作业。否则,您在函数内部对参数所做的更改将保留在函数的本地。在这种情况下,sometype 本身就是一个指针(即 int*),因此为了在 allocateArray 中修改它,您需要传递 int**.

注意:在C中你不需要转换malloc,所以第二行代码可以这样重写:

*arr = malloc(size * sizeof(int));

关于c - 指向指针取消引用的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25829224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com