C语言内存分配及函数返回值的解析。
C语言的内存分配主要如下:
(1)栈区:在执行函数时,函数内局部变量(不包含static变量)、函数返回值的存储单元在栈区上创建,
函数执行结束时这些存储单元自动被释放。栈区内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(2)堆区:即动态分配内存分配,程序在运行时用malloc(calloc,realloc等)申请的内存,程序员自己负责用free释放内存。
(3)静态存储区:该内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。此处存放全局变量、static变量。
(4)常量区:整型常量、浮点型常量、字符型常量及字符串常量都分配在文字常量区,程序结束后由系统释放。
(5)代码区:存放整个程序的代码。数据和代码是分开存储的。
如下有几种容易出错的情况:
#include
#include
char* function();
main()
{
char *b;
char * golble_b;
char a=(char)(100);
b=&a;
golble_b=&a;
printf("the int value of a:%d,%c\n",a,a);
printf("before functin:%c,g_b:%c\n",*b,*golble_b);
golble_b=function();
printf("after functin:%c,g_b:%d\n",*b,*golble_b);
getchar();
}
char* function()
{
char a[2];
char *b;
b=&a;
printf("please input a char:");
scanf("%s",b);
printf("inner of function %c\n",*b);
return b;
}