这是C语言的学习笔记,1万字的文章大概的讲了一下C语言中的知识点,后期会做更多的补充。
喜欢的小伙伴可以点赞支持一下,你们的点赞也是我更新的动力!
1. 什么是C语言?
C语言是一门通用计算机编程语言。例如,人与人交流用到汉语、英语、日语,人和计算机交流就用到计算机语言,计算机语言又有很多种,例如:c/c++/Java/python…
其中C语言是一种常见的计算机语言。
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言广泛应用于底层开发。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的
C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
如图所示,最开始的计算机语言是二进制的语言,那个时候只有科学家才可以使用计算机,后来有了稍微简的汇编语言、B语言、C语言。二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。
目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
2 .第一个C语言程序
我们写出了一个.c的文件,通过编译器编译生成一个.exe文件。常见的编译器有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。vs2019里面集成的其实是MSVC编译器。所谓的继承开发环境就是集合编辑器、编译器、链接器、调试器于一身的开发环境。
来看看第一个代码:
#include<stdio.h>
int main()
{
//printf是一个库函数,使用得包含一个头文件
printf("hello world");
return 0;
//返回值
}
写一个代码的时候,首先要写main函数,它是程序的入口,按下F10,可以看到代码从main函数的第一行开始执行。
按下F5,可以执行代码。
一个程序只能有一个main函数,如果写了两个main函数,是不允许的,所以这次写的函数运行之后都将被注释掉。
3. 数据类型
C语言写代码是为了解决生活中各种各样的问题,例如在商场的一个商品,描述这个商品有商品名称、商品价格、商品种类等类型。C语言中也就有不同的数据类型,比如整型和浮点型:
int main()
{
//整型
int age = 20;//使用int这种类型创建了一个变量叫age,并且赋值为20
age = age + 1;
//浮点型
float pai = 3.14f;//不加f,编译器默认为double类型的数据
return 0;
}
为什么在使用计算机的时候要指定数据的类型呢?在数学中,数值的运算是绝对准确的,例如1/3的值是0.3333……(循环小数)。而在计算机中,数据时存放在存储单元中的,而且存储单元由有限个字节构成,每个存储单元存放的数据范围也是有限的,不可能存放无穷大的数,也不可能存放无限循环的小数。数据存储可以观看这一个博客:https://blog.csdn.net/weixin_43523785/article/details/122635531
每一种数据类型的大小是多少呢?
可以通过语句:printf(“%d\n”, sizeof(char));获得char类型的大小,单位为:字节(byte)。
1byte=8bit
1kb=1024byte
1MB=1024kb
1GB=1024MB
4. 变量常量
生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)
不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。
定义变量的方法
int age = 150;
float weight = 45.5f;
char ch = 'w';
变量的分类
局部变量
全局变量
#include <stdio.h>
int global = 2019;//全局变量
int main()
{
int local = 2018;//局部变量
//下面定义的global会不会有问题?
int global = 2020;//局部变量
printf("global = %d\n", global);
return 0;
}
局部变量的作用域是局部变量所在的局部范围。
当局部变量和全局变量的名字冲突的时候,局部变量优先!
变量的使用
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = num1 + num2;
printf("sum = %d\n", sum);
return 0;
}
这个程序可能会爆出错误,从而导致无法运行程序。原因如下:
报错中讲到的scanf_s的函数时vs编译器提供的,不是c语言自己的。而其他的编译器没有scanf_s函数,也不认识这个函数。在其他编译器中使用scanf_s,它不认识,降低了代码的跨平台性
建议写的时候尽量使用标准c提供的功能和函数。将下列代码复制到第一行就能解决。
#define _CRT_SECURE_NO_WARNINGS 1
变量的作用域和声明周期
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用
的而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程。
例如b定义在{ }内部,所以他的作用域就是在括号里面。
int main()
{
int a = 10;
{
int b = 20;
printf("%d\n", b);
printf("%d\n",a);
}
printf("%d\n",b);//这里不能打印b的值,因为出了它的作用域就销毁了
printf("%d\n",a);
return 0;
}
生命周期
一个生物的生命周期就是从他的出生一直到他的死亡,变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
4. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
a的生命周期就是定义开始,test函数调用结束时结束,所以每一次调用test,a的值都是1,最终结果是十个2。
void test()
{
int a = 1;
a++;
printf("%d ", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
- 全局变量的生命周期是:整个程序的生命周期。
常量
C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:
字面常量
const 修饰的常变量
#define 定义的标识符常量:用一个符号名代表一个常量的,称为标识符常量。
枚举常量:生活中很多量是可以用枚举来表示的,比如性别:男、女、跨性别
enum Sex
{
MALE,
FEMALE,
SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
//字面常量演示
3.14;//字面常量
1000;//字面常量
//const 修饰的常变量
const float pai = 3.14f; //这里的pai是const修饰的常变量
pai = 5.14;//这里报错,pai是不能直接修改的!
//#define的标识符常量 演示
#define MAX 100
printf("max = %d\n", MAX);
//枚举常量演示