目录
enum枚举 struct结构体 union联合体,共用体--属于一类
float int long short double char --类型
关键字--C语言内置好的东西,用时不能冲突
auto 自动--自动变量
int main()
{
int a=10;//a为局部变量,自动创建,自动销毁,也叫自动变量
//本质上是auto int a=10,通常省略
return 0;
}
break 停止,中断 --用于循环、switch
continue 继续 --用于循环
case switch -- switch case
const 常属性
default 默认
do while --do while循环
if else --if else语句
enum枚举 struct结构体 union联合体,共用体--属于一类
extern用来声明外部符号
常用于链接源文件中不同项目之间的符号
int g_val=2021;
extern int g_val;
同一源文件下不同的项目之间,引用外部变量
float int long short double char --类型
for 循环
goto 跳转
register 寄存器
也是一种存储空间,在电脑上一般集成到CPU上,所以和内存是不同的独立存储空间
越往上存储空间越小,读写速度越快,技术实现越难
中央处理器CPU负责处理运算,运算数据来自于内存。后来CPU处理速度加快,内存读写速度跟不上,在内存上放一块cache、寄存器以提高内存处理速度。
register int num=100;
//&num取地址的操作是错的,取的是内存的地址,这里num在寄存器,所以操作错误
仅仅起到建议放到寄存器的作用,到底放不放由编译器决定
return 返回
signed 有符号 unsigned 无符号
sizeof 计算所占内存空间大小
static 静态
修饰局部变量
void test()
{
int a=1;//a为局部变量,出了这个大括号就失效
a++;
printf("%d",a);//生命周期结束
}
int i=0;
while(i<10)
{
test();
i++;
}
void test()
{
static int a=1;//static修饰局部变量,改变了变量的生命周期
//但是作用域没变,a仍然是局部变量
a++;
printf("%d",a);//a++出去后不销毁,下次进来继续做运算
}
int i=0;
while(i<10)
{
test();
i++;
}
运行结果为2 3 4 5 6 7 8 9 10 11
修饰全局变量
static int g_val=2021;//修饰全局变量
extern int g_val;
上述两段为同一源文件下的不同项目
默认一个全局变量具有【外部】链接属性,而如果全局变量被static修饰使得全局变量的外部链接属性变成了内部链接属性,此时的全局变量只能在本源文件本项目内使用,其他源文件或项目即使声明也无法链接到、无法使用。
即如果某个变量不想被别人看到,可以用static修饰。
修饰函数
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);
return 0;
}
上述两段为同一项目下的不同源文件,会显示警报
extern int Add(int x,int y);//声明函数
int main()
{
int a=10;
int b=20;
int c=Add(a,b);
printf("%d\n",c);
return 0;
}
此时不会显示警报
static int Add(int x,int y)
{
return x+y;
}
用static修饰函数后,另一源文件中使用extern无法有效引用
函数是具有外部链接属性的,如果被static修饰,则变为内部连接属性,此时函数只能在自己的源文件内部,不能在其他源文件内部使用
typedef 类型定义,类型重定义
unsigned int num=100;
typedef unsigned int uint;
给unsigned int重新定义为uint ,把已有的类型重新起了个名字
void 空,无
volatile 易变的Linux
define 定义常量和宏
#define NUM 100//define定义常量
#define MAX(X,Y) (X>Y?X:Y)//define定义宏
int main()
{
int a=10;
int b=20;
int c=MAX(a,b);
printf("%d\n",c);
return 0;
}
int c=MAX(a+2,b);//在运行时会被替换成c=(a+2>b?a+2:b);
宏的工作原理是替换,与函数类似但有不同
希望大家多多批评指正!