仅读取双指针的值时在双指针上使用三指针?

Use of triple pointer over double pointer when only reading value of double pointer?

这段代码只是看起来像这样,因为在赋值中禁止使用结构和全局变量。

这两种方式都有效,但我想知道是否只使用双指针会重新分配指针的临时副本。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void allocateData(char ***dptrArrayData, int *intArraySize)
{
    *dptrArrayData = (char**)malloc(*intArraySize*sizeof(char*));
    for (int i = 0; i < *intArraySize; i++)
    {
        (*dptrArrayData)[i] = (char*)malloc(12*sizeof(char));
        (*dptrArrayData)[i] = "Lorem Ipsum";
    }
}

void printDataDoublePointer(char **dptrArrayData, int intArraySize)
{
    for (int i = 0; i < intArraySize; i++)
    {
        printf("Text:%s at index:%d\n",dptrArrayData[i],i);
    }
}

void printDataTriplePointer(char ***dptrArrayData, int *intArraySize)
{
    for (int i = 0; i < *intArraySize; i++)
    {
        printf("Text:%s at index:%d\n",(*dptrArrayData)[i],i);
    }
}
int main()
{
    char **dptrArrayData;
    int intArraySize = 5;
    allocateData(&dptrArrayData,&intArraySize);
    printDataDoublePointer(dptrArrayData,intArraySize);
    printDataTriplePointer(&dptrArrayData,&intArraySize);
    return 0;
}

It works either way, but I was wondering whether only using a double pointer would reallocate a temporary copy of the pointer.

我带你去问一下

的区别
void printDataDoublePointer(char **dptrArrayData, int intArraySize)

void printDataTriplePointer(char ***dptrArrayData, int *intArraySize)

。在每种情况下,函数都会接收调用者提供的所有参数值的副本。这是按值传递语义的本质,这是 C 提供的唯一函数调用语义。

但不涉及重新分配。当指针作为函数参数传递时,只复制指针,而不复制它指向的对象。该函数接收一个独立的指针,指向与原始对象相同的对象。