前言:在初识C语言(上)和初识C语言(中)我们已经大概了解了C语言的大部分内容,还有一些内容没有提到,剩下的内容博主会在初识C语言(下)中一一介绍,此外,感谢各位老铁对博主的支持。
一、常见关键字
在我们写代码的时候,有一个非常令人头疼的问题——那就是有些C语言的关键字我们并不知道它是关键字或者不知道这个关键字的作用是什么,这就导致我们无法正确应用这些关键字从而导致我们无法写出正确的代码或者写出的代码过于复杂难懂。
下面让我们一起来看一看C语言中的关键字:
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
这些关键字表面看起来复杂无章,其实我们只要对它们进行简单的分类,就能够很好的理解;关键字,先介绍下面几个,后期遇到讲解。
1.1关键字typedef
typrdef顾名思义是类型定义,这里应该理解为类型重命名。
比如:
#include <stdio.h>
typedef unsigned int unit_32;
int main()
{
unsigned int num1 = 0;
unit_32 num2 = 0;
return 0;
}
我们看一下num1和num2的类型: 通过观察我们可以得出:typedef重命名前对应的类型和重命名后对应的类型是相同的。
1.2关键字static
在C语言中: static是用来修饰变量和函数的 1.修饰局部变量—称为静态局部变量 2.修饰全局变量—称为静态全局变量 3.修饰函数—称为静态函数 接下来我们通过实例来理解关键字static的三个作用: 实例一: 这里是没有用static修饰的局部变量a 这里是用static修饰的局部变量a,此时a也称为静态的局部变量 通过以上两个程序我们可以得出第一个结论: static修饰局部变量时实际上改变了局部变量量的储存位置,把一个局部变量从栈区存储到静态区,从而导致局部变量出了局部空间不会自动销毁。 实例二:
这里的a是从另一个源文件引入的,所以要是用关键字extern 那么这里我们能不能打印出a的值呢? 答案是可以的,因为全局变量在整个工程中都能够使用。 那当我们对全局变量加static修饰后会产生怎样的结果呢? 让我们一起来看一看: 这里我们可以看出,当全局变量被static修饰后我们无法运行程序 这样我们就可以得出第二个结论: static修饰全局变量,使全局变量只能在源文件内部使用,给我们的感觉就是全局变量的作用域变小了。 实例三: static修饰函数 当函数被static修饰时,不能在其他源文件中使用,只能在源文件内部使用。这里static的修饰函数的作用和static修饰全局变量的作用是相似的。 当然,这只是关键字static在C语言中的作用,static在C++中还有其他作用,后面有机会的话博主也会讲解哈。
二、#define定义常量和宏
#define定义常量和宏其实就是对一些复杂代码的简化,比如说用函数实现两个数相加需要我们在函数内部进行,并且需要返回值;但如果使用#define定义的宏来实现就很方便了。 注意:我们在用#define定义的常量和宏时命名通常使用大写,便于和变量名区分。
#define MAX 1000
#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;
}
三、指针
提到指针就不得不讲内存,那么内存是什么呢?
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中运行的。所以为了有效的使用内存,就把内存划分为一个个小的内存单元,每个内存单元的大小是一个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行编号,这些编号被称为该内存单元的地址。
3.1内存
内存是如何产生的? 内存单元编号是由32/64个二进制位产生的 内存单元编号 == 地址 == 指针 产生的内存空间: 前面所提到的一个整形占4个字节就能借助一幅图来理解 在显示地址时,整形元素的地址就是第一个元素的地址 打印出来a的地址 和地址有关的 单目操作符& 取地址符号,将存储的内存编号取出 *解引用操作符 通过地址找到地址所存储的元素 注意:内存单元编号并没有存储,只是管理内存的编号。 pa是用来存放地址的,所以把pa叫做指针变量
3.2指针变量的大小
由于指针是地址,都是由32(32位机器)个二进制位组成,也就是4个字节 所以无论是int型指针、char型指针、还是double型的指针,所占的内存大小是一样的。
四、结构体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。比如描述学生,学生包含:名字+年龄+性别+学号这几项信息。 这里只能使用结构体来描述。
struct Stu
{
char name[20];
int age;
char sex[5];
char id[20];
};
不使用函数打印 结构体访问操作符 . 结构体变量 . 结构体成员
int main()
{
struct Stu s = { "张三", 18, "男", "20211554" };
printf("%s %d %s %s\n", s.name, s.age, s.sex, s.id);
return 0;
}
使用函数打印
void print(struct Stu* s)
{
printf("%s %d %s %s\n", (*s).name, (*s).age, (*s).sex, (*s).id);
printf("%s %d %s %s\n", s->name, s->age, s->sex, s->id);
}
int main()
{
struct Stu s = { "张三", 18, "男", "20211554" };
print(&s);
return 0;
}
方法一传递指针形参后先对参数进行解引用操作,然后访问结构体成员 方法二使用了另一种结构体访问操作符 -> 结构成员访问操作符 结构体指针->结构体成员
结语:当一个人的才华支撑不起野心的时候,只能安静读书。 到这里初识C语言部分已经结束了,觉得博主写的不错的来个三连吧,此外博主还创建了从零基础到完全掌握C语言的专栏,喜欢的铁子们可以点一下订阅的,初识C语言结束后博主会继续更新第二章——分支和循环语句。 感谢各位铁子的支持和鼓励!
|