理解内存和变量

总结:理解内存和变量

代码段

全局(静态)变量区

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);//指向函数的指针,函数指针(函数参数列表为2int,返回值是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”

“”的能力包含了<>,先在自己的工程中查找文件,再去库函数找

猜你喜欢

转载自blog.csdn.net/xiaobaibai915/article/details/80136881
今日推荐