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



我正在学习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;

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

我不知道为什么我们需要使用2颗去引用的恒星,而不仅仅是写(*arr+i) = value;

由于arr是指向指向int的指针的指针,因此*arr+1是指向int的指针。您需要一个双指针,这样您就可以在函数调用中更改变量的值。

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

注意:在C中,您不需要强制转换malloc,因此第二行代码可以这样重写:

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

最新更新