#include<stdio.h>
#include<stdlib.h>
void GetMemory1(char*p, int num)
{
p = (char*)malloc(sizeof(char)*num);
}
void GetMemory2(char**p, int num)
{
*p = (char*)malloc(sizeof(char)*num);
}
char* GetMemory3(char*p, int num)
{
p = (char*)malloc(sizeof(char)*num);
return p;
}
char* GetMemory4(void)
{
char p[] = "hello world";
return p;
}
int main()
{
char* str1 = NULL;
char* str2 = NULL;
char* str3 = NULL;
char* str4 = NULL;
GetMemory1(str1,100);
GetMemory2(&str2, 100);
str3 = GetMemory3(str3, "hellow");
str4 = GetMemory4();
//strcpy(str1, "hello");
//printf("%s\n", str1);
//无法输出,将str1的地址拷贝到p中,p虽然分配完内存空间,
//但是在在函数结束时p被释放,str1只有一个空间,所以str1越界
/*strcpy(str2, "hello");
printf("%s\n", str2);*/
//可以输出hello,因为传递的是&str2值(将str2的地址拷贝到给p)
//函数执行完毕后,p虽然释放但是p指向的对象(str2)已经被分配完内存空间
/*strcpy(str3, "hello");
printf("%s\n", str3);*/
//返回的地址,相当于拷贝给str3,所以str3实际已经有100个空间。
printf("%s\n", str4);
//输出乱码,因为函数执行完毕后,函数GetMemory4()中的数组空间
//被释放,所以str4这个指针指向的内容是乱码,vs2015编译器是
//烫烫烫,内存是cc cc cc cc cc cc cc cc 四个c对应中文烫
//与第三个GetMemory3()对比,因为malloc分配的内存空间再函数
//结束后如果不free是不会被释放的。所以可以输出hello。
system("pause");
}