前言:
上期向大家介绍了 字符串,转义字符,注释,两种语句,函数,数组,操作符 等知识,这篇博客继续带大家初识C语言,我们开始吧!
目录
❤️11.常见关键字
11.1 typedef
11.2 static
11.2.1修饰局部变量
11.2.2修饰全局变量
11.2.3 修饰函数
🧡12. #define 定义常量和宏
💛13.指针
13.1内存
13.2指针变量的大小
💙14.结构体
11.常见关键字
常见关键词一览~
先不要紧张,关键字很友好哒,先看看它们的样子吧~
下面把其中两个挑出来讲解:
11.1 typedef
typedef 即 type-define ,类型定义,理解为类型重命名。
可以看到,这里我把 int 重命名为 zhx ,num1 和 num2 是同一种类型。
11.2 static
在C语言中:
static 是用来修饰变量和函数的
11.2.1修饰局部变量
尝试看下面两段代码:
//代码1 #include <stdio.h> void test() { int i = 0; i++; printf("%d ", i); } int main() { int i = 0; for (i = 0; i < 10; i++) { test(); } return 0; }
//代码2 #include <stdio.h> void test() { //static修饰局部变量 static int i = 0; i++; printf("%d ", i); } int main() { int i = 0; for (i = 0; i < 10; i++) { test(); } return 0; }
代码1结果:
1 1 1 1 1 1 1 1 1 1
代码2结果:
1 2 3 4 5 6 7 8 9 10
原因就是 static 修饰的变量 i 不可被修改,积累了++;
结论:
static修饰局部变量改变了变量的生命周期
让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束
11.2.2修饰全局变量
main 函数外直接定义变量,称为全局变量。
看两段代码:
//代码1 include<stdio.h> //add.c文件中: int g_val = 2023; //test.c文件中: int main() { printf("%d\n", g_val); return 0; }
//代码2 #include<stdio.h> //add.c文件中: static int g_val = 2022; //test.c文件中: int main() { printf("%d\n", g_val); return 0; }
代码1可以正常编译,代码 2 编译异常,出现连接性错误。
原因是代码 2 中 static 修饰的变量只可以在 add.c 这一个文件中使用,这也是 static 的魅力所在。
结论:
一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。
11.2.3 修饰函数
类似于修饰全局变量,直接看结论:
结论:
一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。
12. #define 定义常量和宏
//define定义标识符常量 #define MAX 1000 //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; }
定义后可以像这样直接使用
13.指针
13.1内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
可以把内存看成小房子,房子的门牌号就是指针;
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
如何取出变量的地址呢?
这里用到了操作符 &
#include <stdio.h> int main() { int num = 10; #//取出num的地址 //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址) printf("%p\n", &num);//打印地址,%p是以地址的形式打印 return 0; }
如何储存地址呢?
需要定义指针变量,就是储存指针的变量
int num = 10; int *p;//p为一个整形指针变量 p = #
用指针修改变量:
#include <stdio.h> int main() { int num = 10; int *p = # *p = 20;//解引用操作,通过指针访问并修改变量 return 0; }
以上举例只是整形指针,可以推广到其他指针类型:
char arr = 'y'; char*ap = &arr; float i = 3.14; float*ip = &i;
其实就是在类型后面加 *
13.2指针变量的大小
幸运的是,我们可以直接用 sizeof 来计算指针变量的大小
#include <stdio.h> int main() { printf("%d\n", sizeof(char *)); printf("%d\n", sizeof(short *)); printf("%d\n", sizeof(int *)); printf("%d\n", sizeof(double *)); return 0; }
指针变量的大小取决于地址的大小
32位平台下地址是32个bit位(即4个字节)
64位平台下地址是64个bit位(即8个字节)
14.结构体
什么是结构体?
简单来讲,就是具有多个特征的个体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
就比如描述一个学生,需要 名字,年龄,性别,学号 这几个特征:
struct Stu { char name[20];//名字 int age; //年龄 char sex[5]; //性别 char id[15]; //学号 };
以上就是结构体的简介和创建。
总结:
到这里 初始C语言 就完结啦,相信你已经收获满满,后期就要开始详细的讲解每个知识点啦 ~ 是不是期待呢?