具有块作用域,函数作用域或函数原型作用域的变量都是无链接变量。这些变量都是相应块,函数,函数原型所私有
链接分三种:外部链接,内部链接和无链接
具有文件作用域的变量可以使外部链接或内部链接。外部链接变量可以在多文件程序中使用,内部链接变量只能在一个翻译单元中使用。
在{
}
里有效的叫块作用域
处理器中的寄存器可能没有足够大的空间来储存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中