内存分为三个区:
栈区:局部变量、函数参数等临时信息存放于此
堆去:动态内存分配的
静态区:全局变量和static修饰的静态变量
如果要将一组源文件中已定义过的全局变量,用在另一组源文件中,则需要在想要使用该全局变量的源文件中,用extern声明该全局变量(全局变量可以在其他源文件中被使用,是因为全局变量具有外部链接属性)
如:int a =11;,声明则为extern int a;
exturn可以声明函数,使得该函数可以在别的源文件中被引用(具体同全局变量)
如:
int add(int x,int y)
{
return x+y;
}
引用时声明:extern int add (int,int)(仅需要函数名,数据类型,返回类型即可)
4.特殊关键字:
typedef //类型重定义
使类型更方便运用,将复杂类型简单化
例:
#include<stdio.h>
typedef unsigned int u int; //意为将unsigned int改为u int
int main()
{
unsigned int a = 1;
//u int 上一条代码与此条代码意思相同
return 0;
}
static //静态的
用法:
a.修饰局部变量。
例:
#include<stdio.h>
void test()
{
int a = 1; //若改为static int a = 1;
a++;
printf("%d",a)
int main()
{
int i = 0;
while(i<0)
{
test()
i++;
}
return 0;
}
结果为10个2,则结果变为2~11,因为static是静态的,它所分配的地址仍存在,不会同局部变量一样用完就销毁。
故,static改变了局部变量的生命周期,本质上是改变了局部变量的存储类型,从栈区改到静态区
b.修饰全局变量。
若在原本的源文件中全局变量前用static修饰,则可以破除掉extern声明的作用,使该全局变量无法在别的源文件中被利用
c.修饰函数。
若在原本的源文件中函数前用static修饰,则可以破除掉extern声明的作用,使该函数无法在别的源文件中被利用(将函数的外部链接属性改为内部链接属性)