C语言#002
1. 初识字符串
1-1. 字符串的声明
单引号包起来的是一个字符(字符)
双引号包起来的是一串字符(字符串)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
// 字符串
int main()
{
// 单引号包起来的是一个字符(字符)
char ch = 'a';
// 双引号包起来的是一串字符(字符串)
char arr[] = "ABC";
return 0;
}
1-2. 字符串的结束标志
字符串在结尾的位置隐藏了一个’\0’的字符
'\0’是字符串的结束标志
1-3. 打印字符串
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
// 字符串打印
int main()
{
// 没有 '\0' 结尾
char str1[] = {
'A', 'B','C','D' };
// 有 '\0' 结尾
char str2[] = "ABCD";
// %s 打印字符串
printf("%s\n", str1); // 打印到找到 '\0' 为止
printf("%s\n", str2); // ABCD
return 0;
}
如果没有以’\0’结尾打印字符串
1-4. 获取字符串的长度
- 引入 string.h 头文件
- 使用 strlen() 函数获取字符串长度
- 声明一个字符串
- 获取长度
- 打印长度
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h> // 引入 string.h 这个头文件,才能使用 strlen() 函数计算字符串长度
// 获取字符串长度
int main()
{
// 使用 strlen() 函数获取字符串长度,需要引入头文件 string.h
// 计算长度时, '\0'不会被计算
// 声明一个字符串
char str[] = "Hello";
// 获取长度
int len = strlen(str);
// 打印长度
printf("%d\n", len); // 5
return 0;
}
注意:
- 有 ‘\0’ 结尾的字符串可以正确打印长度
- 没有 ‘\0’ 结尾的字符串打印长度将会是随机值
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
// 字符串长度需要注意的地方
// 有 '\0' 结尾的字符串可以正确打印长度
// 没有 '\0' 结尾的字符串打印长度会是随机值
int main()
{
// 没有 '\0' 结尾
char str1[] = {
'A','B','C','D' };
// 有 '\0' 结尾
char str2[] = "ABCD";
printf("%d\n", strlen(str1)); // 随机值
printf("%d\n", strlen(str2)); // 4
return 0;
}
2. 常用转义字符
转义字符 | 作用 |
---|---|
\’ | 用于表示字符 ’ (单引号) |
\" | 用于表示字符 " (双引号) |
\\ | 用于表示字符 \ (反斜杠) |
\b | 退格符,相当于 Backspace 键 |
\n | 换行符 |
\t | 水平制表符,相当于 Tab 键 |
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
// %c 打印字符
// \' 单引号
printf("%c", '\'');
printf("\n"); // 换行
// %s 打印字符串
// \" 双引号
printf("%s", "\"");
printf("\n"); // 换行
// %c 打印字符
// \\ 反斜杠
printf("%c", '\\');
printf("\n"); // 换行
// \b 退格符,相当于 Backspace 键
printf("abc\bdef"); // abdef
printf("\n"); // 换行
// \n 换行符
printf("aaa\naaa\n");
// \t 水平制表符,相当于 Tab 键
printf("aaa\taaa"); // aaa aaa
return 0;
}
打印结果
3. ASCII表
需要用到 ASCII表 就看:http://ascii.wjccx.com/
4. 初识选择语句
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
// if 如果
// 为 true(真) 的时候就执行上面的花括号内的内容
// 为 false(假) 的时候就执行下面的花括号内的内容
if (true)
{
printf("True\n");
}
// else 否则
else
{
printf("False\n");
}
return 0;
}
5. 循环语句
循环 | 使用 |
---|---|
while 循环 | 满足条件就继续执行 |
do while 循环 | 先执行后判断条件,不管满不满足条件,总会执行一次 |
for 循环 | 和while差不多,都是满足条件执行,写法不一样 |
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
// 循环语句
// while 循环,满足条件就继续执行
int a = 0;
// 如果 a < 10 就继续执行花括号内的内容
while (a < 10)
{
printf("%d\t", a); // 打印 a
a++; // 每次循环 a 都自增 1
}
printf("\n\n");
// do while 循环,先执行后判断条件,不管满不满足条件,总会执行一次
int b = 10;
do
{
printf("%d\t", b);
b++;
} while (b < 10);
printf("\n\n");
// for 循环,和while差不多,都是满足条件执行,写法不一样
for (int c = 0; c < 10; c++)
{
printf("%d\t", c);
}
return 0;
}
6. 初识函数
用函数来是实现两个数字相加
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
// 用函数来是实现两个数字相加
// Add函数的声明,要在 main 函数之前
// 他的作用就是负责把传递过来的两个数字相加并返回
int Add(int x, int y)
{
return x + y;
}
int main()
{
int num1 = 3;
int num2 = 4;
// 将 num1 和 num2 传递过去, 并用 sum 获取返回的结果
// 这里相当于委托了 Add 函数帮我们把 num1 和 num2 相加了,然后他把结果返回给我们
int sum = Add(num1, num2);
// 打印 sum
printf("%d\n", sum);
return 0;
}
7. 数组
数组 就是 一组相同类型的元素的集合
7-1. 数组的声明
将 10 个整形的数字存起来
int arr[10] = {
1,2,3,4,5,6,7,8,9,10};
7-2. 数组的使用
从下标 0 开始
printf("%d\n", arr[0]); // 打印数组里的第一个元素
7-3. 用循环将数组里的元素全打印出来
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
// 创建一个整形数组
int arr[10] = {
1,2,3,4,5,6,7,8,9,10 };
// for循环打印数组里的元素
for (int i = 0; i < 10; i++)
{
printf("%d\t", arr[i]);
}
return 0;
}
8. 操作符
8-1. 算术运算符
操作符 | 作用 |
---|---|
+ | 加号,可以将两个数字相加 |
- | 减号,可以将两个数字相减 |
* | 乘号,可以将两个数字相乘 |
/ | 除号,可以将两个数字相除 |
% | 取余,可以获取两个数字相除的余数 |
8-2. 移位运算符
操作符 | 作用 |
---|---|
>> | 右移,将当前数字转换成二进制向右移动一位 |
<< | 左移,将当前数字转换成二进制向左移动一位 |
& | 按位与,如果两个数的相应位均为1时,结果位才为1,否则为0 |
| | 按位或,如果两个数的相应位有1,结果位就为1,没有1,结果位为0。 |
^ | 按位异或,如果两个数的相应为相同则为1,否则为0 |
8-3. 赋值操作符
操作符 | 作用 |
---|---|
= | 将等号右边的值赋给等号左边的变量 |
+= | a += 1 相当于 a = a + 1 |
-= | a -= 1 相当于 a = a - 1 |
*= | a *= 1 相当于 a = a * 1 |
/= | a /= 1 相当于 a = a / 1 |
%= | a %= 1 相当于 a = a % 1 |
&= | a &= 1 相当于 a = a & 1 |
^= | a ^= 1 相当于 a = a ^ 1 |
| | a |= 1 相当于 a = a | 1 |
>>= | a >> =1 相当于 a = a >> 1 |
<<= | a <<= 1 相当于 a = a << 1 |
8-4. 单目操作符
双目操作符? a + b,有两个操作数就是双目操作符
单目操作符,就是只有一个操作数
操作符 | 作用 |
---|---|
! | 逻辑反操作,例如:a = true,那么 !a = false |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反,0 变 1 , 1 变 0 |
-- | 两个减号,前置或后置- -,自减1 |
++ | 两个加号,前置或后置++,自增1 |
* | 间接访问操作符(解引用操作符) |
(数据类型) | 强制类型转换 |
8-5. 关系操作符
操作符 | 作用 |
---|---|
> | 大于号 |
>= | 大于号和等于号 |
< | 小于号 |
<= | 小于号和等于号 |
!= | 测试“不相等” |
== | 测试“相等” |
8-6. 逻辑操作符
操作符 | 作用 |
---|---|
&& | 逻辑与,两边条件同时为 true 才满足条件 |
|| | 逻辑或,两边条件有一边为 true 就满足条件 |
8-7. 条件操作符(三目操作符)
操作符 | 作用 |
---|---|
2 == 1 ? 2 : 1 | 判断a是不是等于1,如果相等返回 2,不相等返回冒号后面的 1 |
8-8. 逗号表达式
使用逗号表达式会依次从左向右计算表达式,并返回最后的值
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
// 逗号表达式
int a = 2;
int b = 3;
int c = 4;
// 使用逗号隔开会依次从左向右计算表达式,并返回该值
// a = 3 + 2 = 5, c = 5 - 1 = 4, b = 3 + 4 = 7
int d = (a = b + 2, c = a - 1, b = 3 + c); // 这里的结果为 7
printf("%d\n", d);
return 0;
}
9. 下标引用,函数调用,结构成员
操作符 | 作用 |
---|---|
[] | 下表引用操作符,访问数组的元素的时候使用 |
() | 函数调用操作符,调用函数时,函数名() 就是调用函数 |
. | 用来访问结构体里的成员 |
-> | 用于指向结构体子数据的指针,用来取子数据。 |
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
// Say函数
void Say()
{
printf("Hello\n");
}
// 结构体定义
struct ABC
{
int a;
float b;
};
int main()
{
// [] 下表引用操作符,访问数组的元素的时候使用
int arr[5] = {
1,2,3,4,5 };
printf("%d\n", arr[0]); // 这里 arr[0], 就用到了 [] 来访问数组元素
// () 函数调用操作符,调用函数时,函数名() 就是调用函数
Say(); // 这里的 Say 是函数名, 后面的括号代表调用这个函数,所以函数体里的内容会在这里执行
// . 操作符,将结构体初始化,然后用 . 来调用结构体里的成员
struct ABC abc = {
2, 3.14 };
printf("%d\n", abc.a);
// -> 操作符
// 定义结构体指针, 让指针指向上面的 abc 结构体
struct ABC* bcd = &abc;
// 通过 -> 来访问 a
printf("%d\n", bcd -> a);
return 0;
}