先来一段这样的代码:
#include <stdio.h>
//堆和栈的差异
char* print_stack(){char c[100]="hhhhhhhhhhhhhhhhh";//这里c算是一个指针puts(c);char *p;p=c;return p;
}
int main() {char *p;p = print_stack();puts(p);return 0;
}
执行之后的结果:
可以看出打印之后乱码了(或者是空),这是因为函数执行结束之后,它的栈空间受操作系统的管理,栈空间会被释放,来给下一个函数使用。
如果使用堆空间:
char* print_malloc(){char * p = (char*)malloc(100);strcpy(p,"hhhhhhhhhhh");puts(p);return p;
}
int main() {char *p;p = print_malloc();puts(p);return 0;
}
则不会出现问题。因为堆空间申请以后不会因为函数结束以后得到释放,只要进程没有消亡就会一直存在。