1. 什么是C语言?
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
计算机语言的发展
低级 -> 高级
机器语言 ->助记符,汇编语言 -> B -> C
标准ANSI C 变换过程:ISO K&R C89/C90 C98 C99
C语言和其他语言的区别
C语言是一门面向过程的计算机编程语言,与 C++, Java等面向对象的编程语言有所不同。
C语言编译器
常见的C语言编译器有Clang、Gcc、WIN - TC、SUBLIME、MSVC、Turbo C等。
2. 第一个C语言程序
1. #include<stdio.h> 2. { 3. printf("hello world\n"); 4. return 0; 5. }
主函数的标准格式
//推荐 int main() { } //古早写法 void main() { } //不规范写法 main() { } //不推荐但正确的写法 int main(void)//详细告诉你这个函数没有返回值 { }
科普
返回值
C语言中有一个约定,返回 0 表示正常返回,返回的是非 0,表示的是异常返回。
printf
如果想在屏幕上打印数据,可以使用printf库函数,printf是一个C语言编译器提供的库函数。库函数使用要包含头文件.
通用单位
计算机处理数据,处理的为二进制数据。
1 bit 存一个二进制位
1 byte = 8 bit 1 KB = 1024 byte 1 MB = 1024 KB 1 GB = 1024 MB TB ZB
数据类型
为什么写代码?是为了用程序解决问题。
数据类型符号 |
数据类型 |
单位 |
char |
字符数据类型 |
1个字节 |
short |
短整型 |
2个字节 |
int |
整型 |
4个字节 |
long |
长整型 |
4个字节 |
long long |
更长的整型 |
8个字节 |
float |
单精度浮点数 |
4个字节 |
double |
双精度浮点数 |
8个字节 |
sizeof用法
sizeof是操作符,sizeof计算单位的结果是:字节 - byte。
sizeof(long) >= sizeof(int),也就是说long长整形只要大于等于int整形就可以了,在vs2022中计算出long的大小为4个字节。
计算方法
#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)); return 0; } //编译结果: // 1 2 4 4 8 4 8
3. 变量与常量
生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)
不变的值,C语言中用常量的概念来表示,变的值在C语言中用变量表示。
3.1 定义变量的方法
1. int age = 150; 2. float weight = 45.5f//加f原因:编译器默认为double类型。如果想定义为float类型,就加上f 3. char ch = 'w';
3.2 变量的命名
1)只能由字母(包括大写和小写)、数字和下划线(_)组成。
2)不能以数字开头。
3)长度不能超过63个字符。
4)变量命中区分大小写的。
5)变量名不能使用关键字。
3.3 变量的分类
变量分为两种类型,一种为全局变量,一种为局部变量。
局部变量适用于局部范围内,全局变量适用于全局范围,在整个项目中都有效。
局部变量与全局变量的定义
1. #include<stdio.h> 2. int global = 10;//全局变量 3. int main() 4. { 5. int local = 1;//局部变量 6. return 0; 7. }
小思考
下列代码有没有问题,若没有问题输出的值是什么:
#include<stdio.h> int num1 = 2019;//全局变量 int main() { int num1 = 2020;//局部变量 printf("num1 = %d\n",num1);//打印结果是什么? return 0; }
在vs2022中编译结果如下:
因此我们可以得出:当局部变量和全局变量同名的时候,局部变量优先使用。
变量的使用
#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; }
3.4 变量的作用域和生命周期
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。
1)局部变量的作用域是变量所在的局部范围。
2)全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
1)局部变量的生命周期是:进入作用域生命周期开始,出作用于生命周期结束。
2)全局变量的生命周期是:整个程序的生命周期。
理解
对于作用域和生命周期,如果光看定义可能很难理解,接下来anduin就用一个例子来帮助我们更好地理解这个概念,生命周期可以看做从anduin从出生到死亡这个范围,但是作用域呢可以看成auduin可以坚持写代码的时间,当我的作用域结束之后,我的生命周期并没有结束。这两个是不同的两个概念。
3.5 常量
字面常量
就是直接写出的常量值如 30,3.14,"abcdef",'a'等等....
const 修饰的常变量
1. #include<stdio.h> 2. int main() 3. { 4. const int num = 100; 5. num = 200;//报错 6. return 0; 7. }
当我们对num进行二次赋值是发生报错,这是因为 const 修饰的变量无法被重新写入。
那么常变量又是什么,我们怎么理解他呢?
num 本质是变量,但是因为 const 的修饰限定了他的改变, 就和常量一样。
如果想更加深入理解关键字 const 可以参考我的一篇博客http://t.csdn.cn/PtuDv
#define 定义的标识符常量
#include<stdio.h> #define MAX 1000 int main() { int a = MAX; printf("%d\n", a); //MAX = 2000;//报错 int arr[MAX];//可以 return 0; }
当我们对MAX进行二次赋值时,发生报错,这可以看出MAX为常量。
但是#define 定义的标识符常量可以用来定义数组元素个数如int arr[MAX];
由于#define起替换作用,这里的数组相当于int arr[1000];
枚举常量
枚举从字面意思上看就是一一列举,生活中很多东西都可以一一列举,它们都可以用枚举来表示。
代码演示:
enum Sex { MALE, FEMALE, SECRET }; int main() { enum Sex s = SECRET; printf("%d %d %d\n", MALE, FEMALE, SECRET);//0 1 2 MALE = 3;//报错 证明 }
我们编译后发现在对枚举定义MALE进行赋值时报错,所以我们可以得出结论在枚举类型enum Sex中列举出的可能取值都是枚举常量。而枚举常量中首个元素被默认初始化为0,在进行打印时,打印结果为0 1 2。枚举常量中的状态值是呈+1式递增的。
Tips:枚举常量的初始状态值可以被改变,输出的枚举常量都是数字!!!