十一、关键字
1.typedef——类型定义,只能针对类型
typedef unsigned int unit//等价于unit=unsigned int
typedef struct Node
{ ……;
……;
}Node;//等价于Node=struct Node
2.static
static 一般用于修饰局部变量,全局变量,函数;
(1)static修饰局部变量:
#include<stdio.h>
void test()
{
int a = 1;
a++;
printf("%d ", a);
}
int main(void)
{
int i = 0;
while (i <= 10)
{
test();
i++;
}
return 0;
}
**此时结果为2 2 2 2 2 2 2 2 2 2
将int a=1;改为static int a=1; 后:
结果为2 3 4 5 6 7 8 9 10
是因为改为static int a=1;后,出了作用域,不会销毁a的值,想要理解其本质,首先先看一下这个图:**
static修饰局部变量时,会影响局部变量的生命周期,本质上改变了局部变量的存储位置,生命周期变长,为整个周期。静态局部变量存储于进程中的全局数据区。
(2).static修饰全局变量
首先我们要知道全局变量的属性:全局变量具有外部链接属性。而static修饰全局变量时,这个全局变量的外部链接属性变为内部链接属性,是其他源文件(.c)文件就可以再使用这个全局变量了。则使用时我们会感觉到该全局变量作用域变小。
(3).static修饰函数
此类情况类似于static修饰全局变量。函数同样具有外部属性。而static修饰函数时,这个函数的外部链接属性变为内部链接属性,是其他源文件(.c)文件就可以再使用这个函数了。则使用时我们会感觉到该函数作用域变小。
总结:
1.static修饰变量
a. 函数中局部变量:
声明周期延长:该变量不随函数结束而结束
初始化:只在第一次调用该函数时进行初始化
记忆性:后序调用时,该变量使用前一次函数调用完成之后保存的值
存储位置:不会存储在栈上,放在数据段
b. 全局变量
改变该变量的链接属性,让该变量具有文件作用域,即只能在当前文件中使用
c. 修饰变量时,没有被初始化时会被自动初始化为0
2. static修饰函数
改变该函数的链接属性,让该函数具有文件作用域,即只能在当前文件中使用
3. register——寄存器
**register int num=3;//建议将num存放在寄存器上
为了便于你理解register的作用,请看这个图:**
十二.#define定义标识符常量和宏
1#define:
#define a 10其中a不定类型,可整数,浮点数,字符串,但此后不可以在a=100赋值
2.宏:
#define ADD(x,y) ((x)+(y))
在main函数中引用是这样的:
int c=ADD(a,b);//等价于 int c=((a)+(b))