typedef
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
typedef unsigned int uint;
typedef struct Node
{
int data;
struct Node* next;
}Node;//创建一个结构体,里面包含了数据域,和指针域。
int main()
{
uint num = 0;
uint num1 = 1;
struct Node n1;
Node n2;//两种写法都等价,struct Node n1等价于 Node n2;
return 0;
}
static
在c语言中:
static是用来修饰变量和函数的
- 修饰局部变量-称为静态局部变量
- 修饰全局变量-称为静态全局变量
- 修饰函数-称为静态函数
修饰局部变量
void test()
{
static int a = 1;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
static修饰局部变量的时候,局部变量出了作用域,不销毁,本质上,static修饰局部变量的时候,改变李变量的存储位置的。
影响了变量的生命周期,生命周期变长了,和程序的生命周期一样。
!!!F10进入变成调试,F11到了函数时可以进入函数中进行循环。
修饰全局变量
全局变量是具有外部链接属性的,编译+链接-->生成可执行程序
static修饰全局变量的时候,这个全局变量的外部链接属性就变成了内部链接属性。其他源文件(.c)就不能再使用到这个全局变量了。我们在使用的时候,就感觉作用域是变小了。原本是整个工程,现在是static所在的文件了。
修饰函数
函数时具有外部链接属性的
一个函数本来时具有外部链接属性的,但是被static修饰的时候,外部链接属性就变成了呃呃你不链接属性,其他源文件(.c)就无法使用了。
register
电脑上的存储设备,寄存器(集成到CPU上)
int main()
{
register int num = 3;//建议存放在寄存器中
//内存可以更快的使用寄存器中的num数据
return 0;
}
define
//define定义标识符常量
#define NUM 100
int main()
{
printf("%d\n", NUM);
int n = NUM;
printf("%d\n", n);
int arr[NUM] = { 0 };
return 0;
}
//define定义宏
#define ADD(x,y) ((x)+(y))
int add(int x, int y)
{
return x + y;
}
int main()
{
int a = 10;
int b = 20;
int c = ADD(a, b);
printf("宏定义输出的结果%d\n", c);
int d = add(a, b);
printf("函数定义输出的结果%d\n", d);
return 0;
}