总结:理解内存和变量
代码段 |
全局(静态)变量区 |
栈 stack |
堆 heap |
生命周期 |
作用域 |
默认值 |
内存区域 |
链接属性 |
|
1.全局变量 |
从程序运行开始创建,程序结束销毁 |
从定义该变量开始,一直到文件的结束 |
0 |
全局变量区 |
外部 |
2.静态全局变量 |
从程序运行开始创建,程序结束销毁 |
从定义该变量开始,一直到文件的结束 |
0 |
全局变量区 |
内部 |
3.局部变量 |
进入函数时创建,函数退出时销毁 |
本函数内部有效 |
随机值 |
栈 |
无 |
4.静态局部变量 |
进入函数时创建,程序结束时才销毁 |
无法确定 |
0 |
全局(静态)变量区 |
无 |
5.动态内存 |
调用动态内存函数创建时创建,调用动态内存释放函数时销毁 |
不讨论 |
无 |
堆 |
无 |
6.函数 |
不讨论 |
不讨论 |
不讨论 |
代码段 |
定义静态(内部)定义非静态(外部) |
1. 全局变量:定义在函数外部的变量
//存放对外的函数声明(.h文件)
//存放函数的实现(.cpp文件)
2. 静态全局变量
//static:静态,值可以变,主要用于修饰函数
//存放
static int g_h=100;//链接属性为内部
Static int gs_a=10;//值可以变
int g_a=10;//全局变量
Extern int g_h;//引用外部符号
//外部函数检查严格,内部函数检查不太严格
3. 局部变量:定义在函数内部的变量
局部变量,函数调用灵活,容易内存泄漏
4. 静态局部变量
eg:
static int a =0;//第一次进入才执行
a++;
printf(“%d\n”,a);//打印出来为1-10
5. 函数:
Int max(int a,int b)//对外的函数,外部函数
Int min(int a,int b)//对内的函数,内部函数(本文件可以使用,其他文件不能使用)
*
Int *e[10];//指针数组
Int (*f)[10];//指针
Int *h();//参数列表为空,返回值为指针的函数,指针函数
Int (*g)(int int);//指向函数的指针,函数指针(函数参数列表为2个int,返回值是int)
g=&fun//error,不保存同一类型的
Int fun(int a)//只有一个参数列表,与g不同,要严格相等才能复制
//京东曾经考过
指针要严格相等才能赋值
*
标准规定函数名即表示函数的入口地址
g=max;//&max==max
g=min;g=avg;
Printf(“%d\n”,g(10,20));
Printf(“%d\n”,(*g)(10,20));//*g:先解引用,在调用
*
<stdio.h>:系统标准库头文件
“”:在自己的工程查找文件 #include”max.h”
“”的能力包含了<>,先在自己的工程中查找文件,再去库函数找