只有自动变量才可以是寄存器变量,全局变量和静态局部变量不行
寄存器变量只限于int、char和指针类型变量使用
extern与函数
外部函数:如果在当前文件中定义的函数允许其他文件访问、调用,就称为外部函数。C语言规定,不允许有同名的外部函数。
内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。
C语言规定不同的源文件可以有同名的内部函数,并且互不干扰。
> extern修饰的函数就是外部函数,默认情况下,所有的函数就是外部函数 extern void one(); int two();
> 你想要把其他源文件中定义的外部函数拿过来声明,完整的做法,应该使用extern关键字,表示引用别人的”外部函数”:
extern void one();//需要 在 main() 之前引入, 这里的extern 也可以省略
static与函数
在定义函数时,在函数的最左边加上static可以把该函数声明为内部函数(又叫静态函数),
这样该函数就只能在其定义所在的文件中使用。如果在不同的文件中有同名的内部函数,则互不干扰。
extern与全局变量
> 默认情况下,一个函数不可以访问在它后面定义的全局变量,若要使它可以访问 则:
extern int a;//extern是用来声明一个已经定义过的变量
void cc() { a = 7; }
int a = 9;
> 声明多个 相同的全局变量 ,表示的是同一个变量 如:
int a;
main() {};
int a;
int a;
> 在局部变量前 加extern
int a;
main()
{
extern int a; //这还是全局变量那个 a
//int a; 这是局部变量
}
> 假如在多个源文件中都有全局变量int a;,那么这些源文件的所有全局变量int a;都代表着同一个变量
使用方法 1: 1.c int a 2.c int a
2: 1.c int a 2.c extern int a
3: 1.c extern int a 2.c int a
4: 1.c extern int a 2.c extern int a 这是错的,都声明,没有定义
static与全局变量
如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,
只能在定义该全局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰
结构体
它允许内部的元素是不同类型的
结构体的定义
//结构体类型:
structPerson
{
charname[20]; //char *name;
intage;
floatweight;
};
//定义一个结构体变量,定义变量时才分配存储空间
structPersonperson; //与类型定义一起使用
structStudent {//结构体类型与变量同时定义
char*name;
intage;
} stu;
struct{//省略类型,结构体变量名为stu
char*name;
intage;
} stu;
结构体的注意点
1.不允许对结构体本身递归定义
如下做法是错误的,注意第3行
1structStudent {
2 intage;
3 structStudent stu;
4};
2.结构体内可以包含别的结构体
3.结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按定义的顺序依次排列
结构体的初始化
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-55787-9.html
三大无才