一、请问运行 Test 函数会有什么样的结果?
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
答案是:NULL
传入函数 GetMemory( char *p )的形参为字符串指针,在函数内部修改形参并
不能真正的改变传入形参的值,执行完 char *str = NULL; GetMemory( str ); 后
的 str 仍然为 NULL;
不要被字符串的外表给迷惑了,虽然传入的是地址但是我们如果要对字符串做其他操作的话也是传地址啊,那怎么解决的?
1.改变函数的返回值将分配内存的地址给返回
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *GetMemory(char *p)
{
p = (char *)malloc(100);
return p;
}
void Test(void)
{
char *str = NULL;
st