我做错了什么?我是将内存分配给原始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: %cn", *charPtr);
}
void func1(char** charDoublePointer)
{
//*charDoublePointer = (char *)malloc(sizeof(char));
func2(*charDoublePointer);
}
int main(int argsc, char* argv[])
{
char * charPtr = NULL;
func1(&charPtr);
printf("%cn", *charPtr);
}
您缺少一个间接级别。CCD_ 6需要像CCD_ 8一样取一个CCD_。当你写:
void func2(char *charPtr)
{
charPtr = (char *)malloc(sizeof(char));
*charPtr = 'c';
printf("func2: %cn", *charPtr);
}
您只是分配局部变量charPtr
,它对外部程序没有影响。相反,写:
void func2(char **charPtr)
{
*charPtr = malloc(sizeof(char)); //don't cast result of malloc
**charPtr = 'c';
printf("func2: %cn", **charPtr);
}
如果您坚持,请将名称更改为charDoublePtr
。
并在func1
中称之为:
func2(charPtr);
函数func2
获取原始指针的副本。即函数的参数func2是一个局部变量,在退出函数后将被销毁。
void func2(char *charPtr);
您可以通过以下方式定义的功能
char * func2()
{
char * charPtr = (char *)malloc(sizeof(char));
*charPtr = 'c';
printf("func2: %cn", *charPtr);
return charPtr;
}
void func1(char** charDoublePointer)
{
//*charDoublePointer = (char *)malloc(sizeof(char));
*charDoublePointer = func2();
}