12.11

本周总结

2020/12/11

存储类别、链接和内存管理

存储类别

  1. 作用域
  2. 链接
  3. 存储器
  4. 自动变量
  5. 寄存器变量
  6. 静态变量
  7. 外部变量

(1).作用域描述程序中可访问标识符的区域。一个c的作用域可以是块作用域。块是用一对花括号括起来的代码区域。
(2).声明变量在内层块中的变量,其作用域仅局限于该声明所在的块。

外部链接变量可在多文件程序中使用,内部链接变量只能在一个翻译单元中使用。

(1).如果对象具有静态存储期,那么它在程序的执行期间一直存在。文件作用域变量具有静态存储期。
(2).块作用域的变量通常都具有自动存储期。当程序进入定义这些变量的块,为这些变量分配内存;当退出这个块时,释放当时的内存。
(3).我们目前为止使用的局部变量都是自动类别。
(4).全局变量都采用静态存储方式。

(1). 自动变量属于自动存储期、块作用域且无链接。
(2).c语言规定,未明确声明存储类别的局部变量,均视为自动变量。
(3).程序进入该变量声明所在的块时变量存在,程序在退出该块时变量消失。
(4).自动变量不会初始化。

寄存器变量不在内存中,不能取地址运算。

静态变量是指该变量在内存原地不动
唯一的一次初始化

int fact(int n){
staic int f =10;
f=f*n;
return (f);
}

 第一次n=2 f=10 f=20。第二次n=3 f=20 f=60。

int fact(int n){
int f =10;
f=f*n;
return (f);
}

 第一次n=2 f=10 f=20。第二次n=3 f=10 f=30

外部链接的静态变量具有文件作用域、外部链接和静态存储期。
可以在函数中用关键字可以在extern再次声明。再次声明数组时不用指出数组大小。
外部变量会被自动初始化为0.这一原则也适用于外部定义的数组。

分配内存:malloc()和free()

  • malloc()
  • free()
  • 变长数组和动态内存分配

malloc()分配内存内存,但不会为其赋名。他会找到合适的空闲内存块,这样的内存是匿名的。
可以把该地址赋给一个指针变量,并使用指针访问这块内存。因为char表示1字节,malloc()的返回类型通常被定义为指向char的指针。

double * ptd;
ptd = (double *) malloc (30 * sizeof(double));

 以上代码为30个double类型的值请求内存空间,并设置ptd指向该位置。注意:指针被声明为指向一个double类型,而不是指向内含30个类型值得块。

静态内存的数量在编译时是固定的,在程序运行期间也不会改变。自动变量使用的内存数量在程序运行期间自动增加或减少。但动态分配的内存数量只会增加,除非用free()释放。

变长数组即支持数组在定义是以一个变量来声明长度。

int i,n;
scanf("%d",&n);
int a[n];


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值