【发布时间】:2021-12-16 14:30:58
【问题描述】:
此代码仅看起来像这样,因为在赋值中禁止使用结构和全局变量。
无论哪种方式都可以,但我想知道是否只使用双指针会重新分配指针的临时副本。
#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;
}
【问题讨论】:
-
函数参数需要比它正在更新的变量多一个
*。 -
您可以使用
char **返回值而不是char ***参数。 -
问题不是关于更新,遗憾的是我不能使用返回值,因为我将在一个函数中返回许多数组,问题是使用双指针仅读取是否与使用三元组相同指针。
-
它是关于什么的?
allocateData()需要更新变量dptrArrayData,所以需要char ***。其他函数不更新任何东西,所以他们可以使用char **。 -
所以当我只传入双指针时,它不会创建要读取的数组的临时副本吗?因为如果我更新双指针中的某些内容,则值将保持在范围内。编辑:我是 c 的菜鸟,我只知道 oop ......
标签: arrays c string pointers double-pointer