实例一:
void ptest(char *p)
{
p = malloc(20);
}
int main(int argc, char* argv[])
{
char *p;
ptest(p,"i'm a test prog", 20); /*错误, 函数为实参p作一份拷贝p_copy,真正申请到内存的是p_copy。
strncpy(p, "i'm a test prog", 20);
printf("%s/n", p);
return 0;
}
实例二
void ptest(char **p)
{
*p = malloc(20);
}
int main(int argc, char* argv[])
{
char *p;
ptest(&p); /*没有问题,二级指针*/
strncpy(p, "i'm a test prog", 20);
printf("%s/n", p);
return 0;
}
实例三
char* ptest(char *p)
{
p = malloc(20);
}
int main(int argc, char* argv[])
{
char *p;
p = ptest(p); /*没有问题,有返回值*/
strncpy(p, "i'm a test prog", 20);
printf("%s/n", p);
return 0;
}
实例四
#include <stdio.h>
#include <string.h>
struct rec
{
char* p;
};
void ptest(struct rec *str)
{
str->p = malloc(20);
}
int main(int argc, char* argv[])
{
struct rec *str = (struct rec *)malloc(sizeof(struct rec));
ptest(str); /*没问题, 结构体里面的变量可以在外部申请空间*/
strncpy(str->p, "i'm a test prog", 20);
printf("%s/n", str->p);
return 0;
}