12. 常见关键字
用户不能自己创造关键字
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
12.1 关键字typedef
typedef顾名思义是类型定义,这里应该理解为类型重命名。
typedef struct Node { int data; struct Node* next; }Node; //把struct Node叫做Node
12.2 关键字static
在C语言中: static是用来修饰变量和函数的
1.修饰局部变量称为静态局部变量
2.修饰全局变量称为静态全局变量
3.修饰函数称为静态函数
1.修饰局部变量–静态局部变量
void teat() { int a=5; a++; printf("%d",a); } int i=0; while(i<10) { test(); i++; } return 0; //6 6 6 6 6 6 6 6 6 6 //如果在 int 前加上static 则输出为 6 7 8 9 10 11 12 13 14 15
static修饰局部变量改变了变量的存储类型(位置),使得这个静态变量的生命周期变长了,直到程序结束。
2.修饰全局变量–动态全局变量
一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。
全局变量具有外部链接属性,使用extern可以在其他源文件内部使用
static修饰全局变量,改变了这个全局变量的链接属性,由外边链接属性变为内部链接属性,导致不能跨文件使用。
3.修饰函数–静态函数(和static修饰全局变量是一样的)
//代码1 //add.c static int Add(int x,int y) { return x+y; } //teat.c int main() { printf("%d",Add(1,2))//3 return 0; } //代码2 //add.c static int Add(int x,int y) { return x+y; } //teat.c int main() { printf("%d",Add(1,2))//出现链接行错误 return 0; }
一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。
13. #define定义常量和宏
//define定义标识符常量 #define MAX 100 //define定义宏 #define ADD(x,y) ((x)+(y)) #include<stdio.h> int main() { printf("%d\n", ADD(2, 3));//5 printf("%d\n", 10 * ADD(2, 3));//50 return 0; }
14. 指针
什么是指针?
指针也就是内存地址,指针变量是用来存放内存地址的变量
指针相对于一个内存单元来说,指的是单元的地址,该单元的内容里面存放的是数据。在 C 语言中,允许用指针变量来存放指针,因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。
14.1 内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
取出变量地址如下:
变量num在内存中的存放地址:
地址又是如何存储的呢? 需要定义一个指针变量
int num = 10; int* p=#//p存放num的地址,是一个整型指针变量,即是存放地址的变量 *p = 20;//解引用操作符,*p就是num
指针的使用实例:
int main() { int num = 10; printf("%p\n", &num); int* p=#//p存放num的地址,是一个整型指针变量,即是存放地址的变量 *p = 20;//解引用操作符,*p就是num printf("%d\n", p); return 0; }
14.2 指针变量的大小
#include <stdio.h> //指针变量的大小取决于地址的大小 //32位平台下地址是32个bit位(即4个字节) //64位平台下地址是64个bit位(即8个字节) int main() { printf("%d\n",sizeof(char*)); printf("%d\n",sizeof(short*)); printf("%d\n",sizeof(int*)); printf("%d\n",sizeof(double*)); return 0; }
15. 结构体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
比如描述学生,学生包含:名字+学号+分数这几项信息。
这里只能使用结构体来描述了。
struct Stu { char name[20];//名字 int num;//学号 float score;//分数 };
//打印结构体信息 struct Stu s={"wanger",101,96}; //.为结构体成员访问操作符 printf("name=%s num=%d score=%lf\n",s.name,s.num,s.score); //->访问操作符 struct Stu *p=&s;//定义指针变量p类型 printf("name=%s num=%d score=%lf\n",p->name,p->num,p->score); printf("name=%s num=%d score=%lf\n",(*p).name,(*p).num,(*p).score);
使用实例:
结束语
到这里初始C语言的内容就结束了,后面我将会对这些知识点进行拓展延伸,详细讲解。
山一程,水一程,感谢铁汁的关注~
我们下一篇文章再见。