gpt4 book ai didi

c - 通过将指针传递给两个函数来分配指针

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:27 25 4
gpt4 key购买 nike

我在这里做错了什么?我是将内存分配给原始 charPtr 还是其他?为什么我可以在 func2 中读取 charPtr 的值,但不能在 main 中读取(charPtr 在 main 中为 NULL)?

#include <stdlib.h>
#include <stdio.h>
void func2(char *charPtr)
{
charPtr = (char *)malloc(sizeof(char));
*charPtr = 'c';
printf("func2: %c\n", *charPtr);
}

void func1(char** charDoublePointer)
{
//*charDoublePointer = (char *)malloc(sizeof(char));
func2(*charDoublePointer);
}

int main(int argsc, char* argv[])
{
char * charPtr = NULL;
func1(&charPtr);

printf("%c\n", *charPtr);
}

最佳答案

您缺少一级间接寻址。 func2func1 一样需要一个char**。当你写:

void func2(char *charPtr)
{
charPtr = (char *)malloc(sizeof(char));
*charPtr = 'c';
printf("func2: %c\n", *charPtr);
}

您只是在分配局部变量charPtr,它对外部程序没有影响。相反,写:

void func2(char **charPtr)
{
*charPtr = malloc(sizeof(char)); //don't cast result of malloc
**charPtr = 'c';
printf("func2: %c\n", **charPtr);
}

如果您坚持,请将名称更改为 charDoublePtr

然后在 func1 中调用它,例如:

func2(charPtr);

关于c - 通过将指针传递给两个函数来分配指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26431554/

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