仅读取双指针的值时在双指针上使用三指针?
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 提供的唯一函数调用语义。
但不涉及重新分配。当指针作为函数参数传递时,只复制指针,而不复制它指向的对象。该函数接收一个独立的指针,指向与原始对象相同的对象。
这段代码只是看起来像这样,因为在赋值中禁止使用结构和全局变量。
这两种方式都有效,但我想知道是否只使用双指针会重新分配指针的临时副本。
#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 提供的唯一函数调用语义。
但不涉及重新分配。当指针作为函数参数传递时,只复制指针,而不复制它指向的对象。该函数接收一个独立的指针,指向与原始对象相同的对象。