C语言基础学习 - 初识 C 语言(一)

1. 第一个C语言代码: hello world!

#include <stdio.h>
int main(){
	printf("hello world!");
	return 0;
}

main()函数: 主函数, 程序的入口
printf()函数: 将传给函数的内容输出到显示器上
return: 返回, 程序的结束

2. 数据类型

\数据类型所占字节表示范围
char字符1-128 -> 127 / 0->255
short短整型2-32768 -> 32767 / 0 -> 65535
int整型4-21亿 -> 21亿/ 0 -> 41亿9
long长整型4-21亿 -> 21亿/ 0 -> 41亿9
long long更长的整型8非常大
float单精度浮点数4
double双精度浮点数8
	// 以下这些类型都是表示一个有符号的整数
	// C语言中表示整数优先考虑 int
	int a = 10;// 整型变量 -21亿 -> 21亿 / 0 -> 41亿9
	printf("int %d\n", sizeof(a)); // 4	
	char s = 'e';// 字符类型变量,表示范围:-128 -> 127 / 0->255
	printf("char %d\n", sizeof(s));// 1
	short b = 23;// 短整型变量 表示范围:-32768 -> 32767 / 0 -> 65535
	printf("short %d\n", sizeof(short));// 2
	long c = 209299;// 长整型变量 表示范围:-21亿 -> 21亿/ 0 -> 41亿9
	printf("long  %d\n", sizeof(long));// 4
	long long d = 34;// 长长整型变量 表示范围:非常大
	printf("long long  %d\n", sizeof(long long)); // 8
	
	unsigned int x = 10;

	// 小数 / 浮点数 表示范围? float表示精度非常低,通常优先考虑double
	float e = 1.0;// 单精度浮点数 4字节 
	printf("float  %d\n", sizeof(float));
	double f = 1.0;// 双精度浮点数 8字节
	printf("double  %d\n", sizeof(double)); 

sizeof(): C语言中的运算符, 可以知道某一个变量或者数据类型在内所占字节数
%d: 格式化字符串, 表示我们要打印一个十进制的有符号的整数(区分正负数)
字符类型也是整数,ASCII 编码表描述了字符与数字的对应关系
无符号整数,在之前的数据类型前加 unsigned 即可,只能表示正数和 0

3. 变量

变量 – 可以改变的量; 有些数据是可以变化的, 例如: 工资,年龄, 体重等等. 变量分为局部变量和全局变量

3.1 分类

- 局部变量: 在{}内部定义的变量
- 全局变量: 在{}之外定义的变量

#include <stdio.h>
int a = 10; // 全局变量
int main(){
	int b = 20;// 局部变量
	return 0;
}

如果某个变量在某个函数内, 就是局部变量, 反之, 如果某个变量不在任何函数内, 就是全局变量
两者的作用域和生命周期不一样.

3.2 作用域

作用域( scope ),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的, 而限定这个名字的可用性的代码范围就是这个名字的作用域
简单来说, 也就是变量哪里可以使用, 哪里就是它的作用域.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int g_var = 2022; // 全局变量
int main() {
	printf("1. %d\n", g_var);
	int a = 10;
	{
		int b = 20;
		printf("%d\n", b); // 正确, 输出 20;
		printf("2. %d\n", g_var);
	}
	printf("%d\n", a); // 正确, 输出 10;    
	// pritnf("%d\n", b); // 错误, 因为 b 变量只在上面的{}中有用;
	printf("3. %d\n", g_var);
	return 0;

在源文件 var01.c中

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int var_g = 100;

在源文件 var02.c中

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
// 声明变量
extern int var_g;
int main()[
	printf("%d\n", var_g);
	return 0;
}

在文件 var02.c 中虽然没有给 变量 var_g 一个具体的值, 但是因为我们在 var01.c 文件中声明并定义 var_g, 且在 var01.c 文件中使用关键字 extern 声明了变量 var_g, 所以在主函数可以打印变量 var_g.
局部变量的作用域: 就是局部变量所在的局部范围
全局变量的作用域: 整个项目中都可以使用, 如上面的 var_g 变量.

3.3 生命周期

变量的生命周期就是变量的创建和销毁的时间段.
局部变量的生命周期: 进入局部范围生命周期开始, 出局部范围生命周期结束, 如下面代码片段所示:

{
	int a = 10;
	printf("%d\n", a);
}
// printf("%d\n", a);// 错误, 局部变量 a 的生命周期已经结束;

全局变量的生命周期: 整个程序的生命周期

实际工作中不推荐使用全局变量,局部变量和全局变量名字可以相同,但是局部变量会覆盖全局变量

3.4 练习 – 求两个整数的和

#define _CRT_SECURE_NO_WARNINGS //必须程序的最上面
#include <stdio.h>
int main(){
	int num1, num2;
	printf("输入两个整数:");
	scanf("%d %d", &num1, &num2);
	int result = num1 + num2;
	printf("两个数的和:%d\n", result);
}
scanf("%d", &num1);

其中 & 表示取地址, 上面这条语句表示将从键盘输入的数据存储到整型变量 num1 中
注意: 每次使用 scanf() 函数都要在程序首行添加 #define _CRT_SECURE_NO_WARNINGS, 为了后面使用方便, 我们在 Visual Studio 的安装路径下找 newC++file.cpp 文件, 找到之后用记事本打开, 将需要自动生成的代码放进去保存. 后面新建的源文件会自动添加这些代码.(可以将任何你想让程序在新建文件时自动添加的代码放进去)

4. 常量

常量 – 不能改变的量; 生活中的一些数据是不能变化的,例如, 血型, 性别,圆周率等等.
C语言中的常量分为以下四种:·

  1. 字面值常量 3.14; 10;
3.14;// 浮点数常量
10;// 整型常量
"hello world";// 字符串常量
'c';// 字符常量
  1. const 修饰的常变量, 修饰的变量的值不能被改变; const 是 C语言中的一个关键字;
int num = 10;// num 是变量
const int n = 10; // n 值不能被修改
// n = 12; // 报错, 常量值在程序运行中不能通过赋值语句被修改
  1. #define 定义的标识符常量
#define M 100

宏定义: 没有数据类型, 没有赋值运算符;

  1. 枚举常量: 枚举往往是用来罗列一个事务的所有情况
enum Sex {
	male,// 男性
	female,// 女性
	unknow,// 未知
};

上面的代码创建了三个常量, 分别是 male, female, ubknow.

5. 字符串

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串
注:字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算作字符串内容。字符
字符是由 ' 引起来的, 且只能有一个字符, 不能包含多个字符. 如下面的代码片段所示:

'a'; // 字符
// 'ab';// 错误
"hello world";// 字符串

6. 转义字符

假设我们要在屏幕上打印一个目录: c:\test.c

printf("c:\test.c")

上面代码执行的结果如下图所示:
在这里插入图片描述
显然这不是我们想要的结果, 事实上是因为路径中有特殊的转义字符 \t, 它在C语言中表示水平制表符 (tab), 类似于 \t 这样的存在叫做转义字符, 之前使用到的 \n 表示换行. 那如何在正确的将目录打印到屏幕上呢?
使用 \, \\ 表示字面值 \(字面值: 字符本身), 也就是说想在屏幕上打印 \, 在程序里需要用 \\表示.如下面的代码所示:

printf("c:\\test.c")

打印效果如下图所示:
在这里插入图片描述
常见的转义字符如下表所示:

转义字符释义
\?在书写连续多个问号时使用, 防止它们被解析成三字母词
\’用于表示字符常量 ’
\"用于表示一个字符串内部的双引号
\\用于表示一个反斜杠,防止它被解释为一个转义序列符。警告字符,蜂鸣
\a警告字符,蜂鸣
\b退格符
\f进纸符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1-3个八进制的数字。如:\130
\xddd如:130Xddd表示3个十六进制数字。如:\x030
// 假设打印 My name is "CY";
// printf("My name is "CY""); // 错误
printf("My name is \"CY\"");

6.1 练习

//程序输出什么?

#include <stdio.h>
#include <string.h>
int main()
{
    printf("%d\n", strlen("abcdef"));// 6
    // \62被解析成一个转义字符
    printf("%d\n", strlen("c:\test\628\test.c"));// 14
    return 0;
}

strlen(): 求字符串的长度, 想使用这个函数, 我们需要添加头文件 #include <string.h>
上面的代码有两个输出, 第一个输出是 6, 显而易见, 就是字符串的长度, 可是第二个输出的结果是 14, 而不是 18, 这是为什么呢? 因为第二个字符串包含多个转义字符, 除了两个 \t, 其中的 \62 也是转义字符, 为什么不是 \628 是一个转义字符? 因为 \ddd 表示的是 1-3 个八进制的数字, 八进制的数字是使用 0 ~ 7 的数字表示的, 8 明显不属于八进制的表示, 但是这个转义字符具体表示的是什么? 我们可以使用语句 printf("\62");来看它具体的含义. 62 是一个八进制整数, 表示十进制的 50, 然后我们可以查询 ASCII 表 50 对应的含义是什么.

7. 注释

//: 单行注释
/* */: 多行注释

// 注释
/* 多行注释 
多行注释 */

不推荐使用多行注释, 因为多行注释不能嵌套.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值