目录
关键字
1.C语言提供的,不能自己创建
2.关键字不能做变量名
常见关键字
auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
auto:自动的——每个局部变量都是auto修饰的;
自动变量——自动创建,自动销毁
extern:用来声明外部符号
register:寄存器关键字
例:register int num=100 //建议num值存放在寄存器内,最终由编译器决定
//大量、频繁被使用的数据,可以放在寄存器内,提升效率
//寄存器变量不能取地址
计算机中数据可以储存在哪里?
寄存器、高速缓存、内存、硬盘、网盘——从左到右→造价越低,速度越慢,空间越大
其他:
signed——有符号的 10 -20
unsigned——无符号的
static——静态的
union——联合体(共用体)
void——无/空
define\include——不是关键字,是预处理指令
typedef 类型重定义(重命名) :
将unsigned int 重命名为uint_3, 所以uint_3也是一个类型名
typedef unsigned int uint_3;
关键字static:
static是用来修饰变量和函数的
1. 修饰局部变量-静态局部变量
static修饰局部变量改变了变量的生命周期 让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。(本质是改变了变量的存储类型)
栈区——局部变量、函数的参数
堆区——动态内存分配的
静态区——全局变量、static修饰的静态变量
2. 修饰全局变量-静态全局变量
一个全局变量被static修饰,使得这个全局变量只能在自己所在的源文件内使用,不能在其他源文件内使用。
本质:全局变量在其他源文件内部能够被使用,是因为具有外部链接属性,static修饰后,变成了内部链接属性
3. 修饰函数-静态函数
一个函数被static修饰,使得这个函数只能在自己所在的源文件内使用,不能在其他源文件内使用。
本质:static修饰将函数的外部链接属性变成了内部链接属性
#define定义常量和宏
1.define定义符号
#define MAX 1000
2.define定义宏
注意以下区别:
//define定义宏
#define ADD(x, y) ((x)+(y))
#include <stdio.h>
int main()
{
int sum = ADD(2, 3);
printf("sum = %d\n", sum);
sum = 10 * ADD(2, 3);
printf("sum = %d\n", sum);
return 0;
}
结果:sum=5;sum=50
//define定义宏
#define ADD(x, y) x+y
#include <stdio.h>
int main()
{
int sum = ADD(2, 3);
printf("sum = %d\n", sum);
sum = 10 * ADD(2, 3);
printf("sum = %d\n", sum);
return 0;
}
结果:sum=5;sum=23
初识结构体
结构体用来描述复杂类型
#include <stdio.h>
//结构体可以让C语言创建新的类型
//创建一个学生
struct stu
{
//成员变量
char name[20];
int age;
double score;
};
//创建一个的书的类型
struct Book
{
char name[20];
float price;
char id[30];
};
int main()
{
struct stu s = { "王鹏",20,96.0 };//结构体的创建和初始化
printf("1:%s %d %lf\n", s.name, s.age, s.score);//结构体变量.成员变量
struct stu* ps = &s;
printf("2:%s %d %lf\n", (*ps).name, (*ps).age, (*ps).score);
printf("3:%s %d %lf\n", ps->name, ps->age, ps->score);
return 0;
}
->基本用法:(结构体指针)->(成员变量名)