目录
1.常见关键字
auto break case char const continue define
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
1.1关键字typedef
typedef 顾名思义是类型定义,这里应该理解为类型重命名。
寄存器关键字:register
int num=10;//占4个字节
register int num2=20;//建议将20放在寄存器中
1.2关键字static
static关键字是用来修饰变量和函数的
1.2.1修饰局部变量
static修饰局部变量,局部变量就变成静态的局部变量,出局部范围不会被销毁,下一次进入函数时依然存在.其实是因为static修饰的局部变量是存储在静态区的,相当于生命周期变长了
static修饰局部变量时,实际改变的是变量的存储位置,本来一个局部变量是存放在栈区的,被static修饰后放在了静态区,出作用域后依然存在,生命周期没有结束.
1.2.2修饰全局变量
//extern是用来修饰外部符号的
一个全局变量本来是具有外部链接属性的,但是被static修饰后,外部链接属性就变成了内部链接属性,只能在自己所在的源文件内部使用,不能在其他文件内部使用
使用上感觉作用域变小了
1.2.3修饰函数
一个函数本来是具有外部链接属性的,但是被static修饰后,外部链接属性就变成了内部链接属性,只能在自己所在的源文件内部使用,不能在其他文件内部使用,使用上感觉作用域变小了
2. #define定义常量和宏
2.1#define定义标识符常量
#define MAX 1000
2.2 #define定义宏
#define MAX(x,y) ((x)>(y)?(x):(y))
3.指针
3.1内存
一个内存单元是一个字节
内存单元是有编号的,编号就是内存单元的地址,我们把地址也叫指针
//取出变量地址
#include <stdio.h>
int main()
{
int num = 10;
#//取出num的地址
//注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
printf("%p\n", &num);//打印地址,%p是以地址的形式打印
return 0;
}
int a=10;
int *pa=&a;//pa是用来存放地址的,所以我们把pa叫指针变量
//这个*告诉我们,pa是一个指针变量
//int告诉我们,pa指向的对象是int类型
char ch='w;
char *pc=&ch;
*pc='q'; //*解引用操作符,它的意思就是通过pc中存放的地址,找到pc指向的内容
printf("%c\n",ch);//q
指针变量是专门用来存放地址的
3.2指针变量的大小
指针变量的大小取决于地址的大小
指针大小在32位平台是4个字节,在64位平台是8个字节
4.结构体
结构体使得C语言有能力描述复杂类型
//类型
struct Stu
{
char name[20];
int age;
};
int main()
{
//结构体变量
struct Stu S1={xx,18};
struct Stu S2={xxx,20};
printf("%s %d\n",S1.name,S1.age);
printf("%s %d\n",S2.name,S2.age);
return 0;
}