初始C语言
什么是C语言
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
其编译器主要有Clang、GCC、VS、WIN-TC、SUBLIME、MSVC、Turbo C等。
后序我使用的编译器主要是VS2019.
第一个C语言入门程序
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
相信大多数刚入门的小伙伴遇到的第一个C语言程序便是这个了吧。
这里需要注意的是:main函数是程序的入口,而一个工程中main函数有且只有一个。
数据类型
char | //字符串类型 |
---|---|
short | //短整型 |
int | //整形 |
long | //长整型 |
long long | //更长的整形 |
float | //单精度浮点数 |
double | //双精度浮点数 |
看到这里有聪明的小伙伴会问了,为什么会出现这么多的类型啊?每种类型的大小又是多少呢?唉别急,我们这就来一一解决。
首先为什么会有这么多数据类型:
首先,所有的语言在运行时都要确定变量的数据类型,只不过一些语言在编译或运行过程中会自己去推断处理,有的需要你主动指定。C语言属于后者。
接着说明为什么需要确定类型。简单来说,因为数据在内存中的存储形式都是二进制的数字,你在写程序时觉得很清晰的数据或逻辑对电脑来说就是一串0101…所以你需要通过指定数据类型来告诉电脑如何去解析这些数据。
那各种数据类型所占大小又具体是多少呢:
当然我也不能随便说,这里我们借助一个函数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(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(long double));
return 0;
}
得到的结果是这样的
注意:存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。
到了这里问题又来了,我们知道了有这么多种数据类型,怎么去使用呢?
先别急,我们先了解完变量与常量后再来一起使用。
变量、常量
首先我们需要知道什么是变量,什么是常量。其实很简单,能变的就是变量不能变的就是常量了。这时候有人说了:听君一席话,犹如庄周带净化,嘿嘿,我们来细看一下再举一些例子你就知道了:
生活中的有些值是不变的(比如:圆周率,性别(?),身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)。
不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。
我们知道了变量和常量,接下来就是结合上一个知识点数据类型来定义变量了。
定义变量的方法
假如说我们有个男性小伙伴年龄18,身高185,体重118.5,那么我们怎么来定义变量呢?这里先给出基本格式:数据类型+变量名称,具体方式如下:
#include<stdio.h>
int main()
{
int age=18;
int height=185;
double weight=118.5;
char sex='b';//boy
printf("%d %d %f %c", age, height, weight, sex);
return 0;
}
这样我们就算是定义好了一些变量,我们编译一下可以看到结果:
可以看到未引用的局部变量,什么叫未引用呢,简单来讲就是说你定义了,但是你没用它。那我们添加语句:
我们将这几个进行输出操作然后再次编译,可以看到:
使用了未初始化的局部变量,初始化实际上就是说在你定义这个变量的时候最好给它一个初始值,就用赋值操作符对变量进行赋值操作,这里我们将几个变量进行初始化:
#include<stdio.h>
int main()
{
int age=18;
int height=185;
double weight=118.5;
char sex='b';//boy
printf("%d %d %f %c", age, height, weight, sex);
return 0;
}
在再次编译发现成功后我们直接运行程序得到:
变量的分类
细心的小伙伴应该发现了上一个知识点中反复提到了一个词:局部变量。
这里就要涉及到C语言变量的分类了,主要分为局部变量和全局变量。
局部变量和全局变量其实就类似于游戏里的点券和现实中的money,游戏中的点券只可以在游戏内使用,而显示中的money不仅可以在游戏中使用,也可以在其他地方使用。
那当局部变量和全局变量是同一个名称时谁会优先使用呢,你想想游戏里还有点券的话你在游戏里买东西还氪金么,我觉得大部分都是不会的吧,所以当然是优先使用游戏点券了,下面我们用代码来验证:
#include<stdio.h>
int globel = 2021;
int main()
{
int globel = 2022;
printf("%d", globel);
return 0;
}
输出得到的结果为:
可以看到得到的数据是定义在main函数中的局部变量2022而不是全局变量2021。
总结:
上面的局部变量global变量的定义没有什么问题的。
当局部变量和全局变量同名的时候,局部变量优先使用。
变量的作用域和生命周期
作用域(scope)
程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的 而限定这个名字的可用性的代码范围就是这个名字的作用域。
局部变量的作用域是变量所在的局部范围。
全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
全局变量的生命周期是:整个程序的生命周期。
常量
C语言中的常量和变量的定义的形式有所差异。 C语言中的常量分为以下以下几种:
枚举常量
这里我就不具体举例了,有兴趣的小伙伴可以自行了解或者等后续用到的时候再讲解。
转义字符
"hello world.\n"
这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字 符串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
int main()
{
char arr1[] = "boy";
char arr2[] = { 'b', 'o', 'y' };
char arr3[] = { 'b', 'o', 'y', '\0' };
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
可以看到用""的方式对字符数组赋值时,编译器会自动在尾部添加\0,而你自己一个字符一个字符赋值时,编译器是不会自动添加\0的,这就是为什么arr2的boy后还有一串乱码,这个时候就要自己手动添加\0。
转义
加入我们需要在屏幕上输出一个目录:
c:\code\test.c
我们该如何写代码呢?
#include <stdio.h>
int main()
{
printf("c:\code\test.c\n");
return 0;
}
输出后可以看到并不是我们想要的东西,而出问题的地方都在\的位置,仔细观察可以看见\t的颜色略微有些不同。这里就不得不提一下转义字符了。转义字符顾名思义就是转变意思。下面看一些转义字符。
选择语句
下面我们用代码来实现一个选择语句
#include <stdio.h>
int main()
{
printf("作为大学生你要:1.好好学习 2.混吃等死>>");
int a = 0;
scanf("%d", &a);
if (a == 1)
printf("美好前途\n");
else
printf("睡大马路\n");
return 0;
}
直接输出测试:
循环语句
有些事必须一直做,比如说我们日复一日的学习。
还比如我们需要输出1-100的数据,就可以使用循环语句来实现。
#include <stdio.h>
int main()
{
int i=1;
while(i<=100)
{
printf("%d ",i);
i++;
}
return 0;
}
输出结果图如下
C语言如何实现循环?主要通过以下3种方式:
- while循环
- for循环
- do…while循环
这里我们使用的是while循环,有关for循环和do…while循环我们后序再来了解吧。