一、常见关键字
1.C语言提供的,不能自己创建关键字
2.变量名不能是关键字
signed 有符号的、unsigned 无符号的、extern 是申明外部符号的、register 寄存器关键字、union联合体(共用体)、void 无
define、include不是关键字是预处理指令
二、typedef关键字
1.类型定义,可以理解为类型重定义
typedef unsigned int u_int;
int main()
{
unsigned int num = 100;
u_int num2 = 100;
//这两段代码是一个意思。把一个复制类型简单化
return 0;
}
三、static关键字
static是用来修饰变量和函数的
1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数
1.修饰局部变量
void test() //空类型,不需要返回值
{
int a = 1; //test一共被调上去10次
a++;
printf("%d", a); //所以显示结果是十个2
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
void test() //空类型,不需要返回值
{
static int a = 1; //通过静态修饰的变量,不会再函数执行完后销毁
a++;
printf("%d", a); //所以显示结果是2-11
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
对比后得知,static修饰局部变量,改变了局部变量的生命周期(本质上改变了变量的存储类型)
2.static修饰全局变量,使得这个全局变量只能在自己所在的源文件(.c)内部可以使用,其他源文件不能使用。
3.static修饰函数,使得函数只能在自己所在的源文件内部使用,不能再其他源文件内部使用,本质上static是将函数的外部链接属性变成了内部链接属性(和修饰全局变量一样)。
四、#define定义常量和宏
define是一个预处理指令
1.define定义符号
#define max 1000
int main()
{
printf("%d\n", max);
return 0;
}
2.define定义宏
#define add(x,y) ((x)+(y))
int main()
{
printf("%d\n", 4 * add(2, 3));
return 0;
}
五、初识指针
1.每个内存单元的大小是1个字节byte,内存单元进行编号,这些编号称为该内存单元的地址
int main()
{
int a = 10; //a再内存中分配的空间是4个字节
printf("%p\n", &a); //%p专门用来打印地址
int * pa = &a; //pa是用来存放地址的,再c语言中叫指针变量
//*说明pa是指针变量,存放的是数据地址
//int说明pa指向的对象是int类型的
return 0;
}
2.指针实例
int main()
{
int a = 10;
int* pa = &a;
*pa = 20; //*是解引用操作,*pa就是通过pa的地址找到a
printf("%d\n", a);
return 0;
}
3.指针的大小
指针的大小是相同的,在32位平台是4个字节,64位平台是8个字节
int main()
{
printf("%d\n", sizeof(char*));
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(short*));
printf("%d\n", sizeof(float*));
return 0;
}
六、结构体
1.结构体的初始化
struct Stu //创建一个学生
{
char name[20]; //成员变量
int age;
double score;
};
int main()
{
struct Stu s = { "皮皮虾",20,92.5 }; //结构体的创建和初始化
printf("%s %d %lf\n", s.name, s.age, s.score);
struct Stu * ps = &s; //struct Stu是指针类型
printf("%s %d %lf\n", (*ps).name, (*ps).age, (*ps).score );
printf("%s %d %lf\n", ps->name, ps->age, ps->score);
//2、3方法相同,使用方法结果指针体-> 成员变量名
return 0;
}