#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//堆
char *getMem(int num)
{
char *p1= NULL;
p1 = (char *)malloc(sizeof(char)*num); //用户分配内存空间,由操作系统管理,函数结束后不会被析构掉
if( NULL== p1)
{
return NULL;
}
return p1;
}
//栈 局部变量不能把其内存地址作为函数返回值返回
//注意:此处 return 不是把内存块64个字节return出来,而是把内存块的首地址(内存标号,比如0xaa11)返回给主函数中的tmp
//理解指针的关键是 内存,没有内存哪来的指针。
char *getMem2()
{
char buf[64]; //临时变量,系统自动分配内存空间,函数结束后将会被析构掉
strcpy(buf,"123456");
printf("buf:%s\n",buf);
//return buf; //注意:函数执行完,buf[]数组的内存块即被析构掉了,
//若将该内存块的首地址buf返回给主函数,其对应的内容是未知的,程序可能崩溃
}
void main()
{
char *tmp = NULL;
tmp = getMem(10);
if( NULL==tmp )
{
return ;
}
strcpy(tmp,"233333"); //向tmp所指向的内存空间中copy数据
printf("tmp:%s.\n",tmp);
free(tmp);
tmp=getMem2();
printf("tmp:%s.\n",tmp); //release下可以输出字符串“123456”,但是debug下乱码
system("pause");
}
堆栈程序理解
最新推荐文章于 2024-07-23 21:59:03 发布