C primer Plus - 12 373页 存储类别,链接和内存管理

具有块作用域,函数作用域或函数原型作用域的变量都是无链接变量。这些变量都是相应块,函数,函数原型所私有
链接分三种:外部链接,内部链接和无链接
具有文件作用域的变量可以使外部链接或内部链接。外部链接变量可以在多文件程序中使用,内部链接变量只能在一个翻译单元中使用。
在{
}
里有效的叫块作用域

处理器中的寄存器可能没有足够大的空间来储存double

extern声明不会引起分配存储空间。

块作用域的静态变量无链接。文件作用域的静态变量具有内部链接
具有块作用域的变量是局部变量,无链接;
具有文件作用域的变量可以使内部链接或外部链接。
内部链接意味着只有其丁义所在的文件才能使用该变量。
外部链接意味着其他文件也可使用该变量。

随着程序调用函数和函数结束,自动变量占用内存数量也相应地增加或减少,这部分的内存通常作为栈来处理,这意味着新创建的变量按顺序加入内存,然后以相反的顺序销毁。使用动态内存通常比栈内存慢

void gobble(double ar[],int n)
{
	double * temp = (double *)malloc(n * sizeof(double));
}

当函数结束时,作为自动变量的指针 temp 也会消失,但是它所指向的16000字节的内存却依然存在。由于temp指针已被销毁,所以无法访问这块内存,它也不能被重复使用,因为代码中没有调用free()释放这块内存。

简而言之,const放在*左侧任意位置,限定了指针指向的数据不能改变
const放在*右侧,限定了指针本身不能改变。

所有的文件作用域变量都有静态存储期。块作用域的变量通常具有自动存储器,局部变量都是自动类别
全局变量两种使用方式
1:在一个文件中使用定义式声明,在其他文件中使用引用式声明(extern)
2:将变量放在一个头文件中,然后在其他文件中包含该头文件
这样的话必须在头文件中用static声明全局const变量。如果去掉static,那么在a.c和b.c中包含c.h将导致每个文件中都有一个相同标识符的定义式声明,C标准不允许这样做,相当于给每个文件提供了一个单纯的数据副本,由于每个副本只对该文件可见,因此无法用这些数据和其他文件通信。

for循环里生命的变量,只在循环内部作用

malloc()和free()的原型都在stdlib.h中

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值