今天看林锐的高质量c/c++编程看到的小程序,记录下来:
#include <stdlib.h>
#include <string.h>
void test(char *p)
{
//char p[]="hello world";
//char *p=(char *)malloc(10);
//strcpy(p,"hello world");
p=(char*)malloc(100);
//return p;
}
void main()
{
char *str=NULL;
test(str);
strcpy(str,"hello world");
printf(str);
free(str);
}
这种传参数的方法是错误的,程序将崩溃。实参传递给形参的其实str变量的值
而test函数返回后变量p以及释放,所以str中存放的值没有改变还是NULL。
#include <stdlib.h>
#include <string.h>
void test(char **p)
{
//char p[]="hello world";
//char *p=(char *)malloc(10);
//strcpy(p,"hello world");
*p=(char*)malloc(100);
//return p;
}
void main()
{
char *str=NULL;
test(&str);
strcpy(str,"hello world");
printf(str);
free(str);
}
这中方法是正确的传地址操作。
其实仔细分析还是挺简单的。