IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C语言基础复习回顾(持续更新) -> 正文阅读

[数据结构与算法]C语言基础复习回顾(持续更新)

更新时间:2021.11.25
知识点:

  • 数据类型
  • 变量和常量
  • 字符串、转义字符和注释
  • 选择语句
  • 循环语句
  • 函数
  • 数组
  • 操作符

一、基本数据类型

七种基本类型:char、short、int、long、long long、float、double.在64位机器下经sizeof测试后的占用空间情况如下:

数据类型占用空间大小 (byte)
char1
short2
int4
long4
long long8
float4
double8

二、变量和常量

2.1 变量

  • 局部变量:定义在大括号内部的变量。
  • 全局变量:定义在大括号外部的变量。

当两者名字冲突时(允许但不提倡),局部变量优先。

2.2 常量

2.2.1 字面常量

3.1415926

2.2.2 const修饰的常变量

注意,虽然被const修饰的变量不可更改,但其本质仍然是变量而非常量,由于初始化数组不能用变量,所以下面用数组的初始化来测试:

	const int n = 10;
	int arr2[n] = { 0 };

在这里插入图片描述

2.2.3 #define定义的标识符常量

#define MAX 10000

2.2.4 枚举常量

	enum Week
	{	//所有可能取值,这些是枚举常量,默认从0开始,递增1,可以赋初值
		Monday = 2,
		Tuesday,
		Wednesday,
		Thursday,
		Friday,
		Saturday,
		Sunday
	};
	enum Week week = Monday;
	printf("%d\n", week);
	printf("%d\n", Tuesday);
	printf("%d\n", Friday);
	printf("%d\n", Sunday);

运行结果:
在这里插入图片描述

尝试更改枚举值,发现报错:
在这里插入图片描述

三、字符串+转义字符+注释

3.1 字符串

C语言中通过定义字符数组的方式实现字符串。结束标志:\0。
下面定义三种不同的字符串:

	char arr1[] = "abc";
	char arr2[] = { 'a','b','c' };
	char arr3[] = { 'b' ,'\0'};
	printf("arr1中元素:%s\n",arr1);
	printf("arr2中元素:%s\n",arr2); //找到\0时停止
	printf("arr3中元素:%s\n",arr3); 
	printf("arr1长度:%d\n", strlen(arr1));
	printf("arr1数组长度:%d\n", sizeof(arr1) / sizeof(arr1[0]));
	printf("arr2长度:%d\n", strlen(arr2));//随机值,找到\0时停止。			Q:为什么随机值是一样的,真的是随机值吗?
	printf("arr2数组长度:%d\n", sizeof(arr2) / sizeof(arr2[0]));
	printf("arr3长度:%d\n", strlen(arr3));
	printf("arr3数组长度:%d\n", sizeof(arr3) / sizeof(arr3[0]));

运行结果:
在这里插入图片描述

debug一下:

可以看到:
当用"abc"方式定义时,结尾处默认添加了 ‘\0’ ,因此可以正常打印出结果。
当用{ ‘a’,‘b’,‘c’ }方式定义时,由于没有加上 ‘\0’ ,因此用%s打印字符串时找不到结束标志,所以会一直在内存中继续找下去,直到找到 ‘\0 ‘才结束打印,这个过程完全不可预测的,随机的。
当用{ ‘b’ ,’\0’}方式定义时,手动添加了结束标志 ‘\0’ ,因此可以正常打印结果。
此外,可以发现结束标志 ‘\0’ 是不算做字符串长度的,但是算作数组的长度。

3.2 两个较重要的转义字符

  • \ddd:其中ddd表示1-3个八进制数字。
  • \xdd:其中dd表示2个十六进制数字。
	printf("%c\n", '\101');//A的ASCLL为65,对应8进制:101;对应16进制:41.
	printf("%c\n",'\x41');
	printf("%d\n", strlen("c:\test\328\test.c"));//包含\t \32 \t三个转义字符,应输出14

运行结果:
在这里插入图片描述

3.3 注释

I have nothing to say!

四、选择语句

五、循环语句

六、函数

七、数组

八、操作符

  • 算术操作符:+ 、-、*、/、% 等 注意/,操作数至少有一个为小数,结果为小数,否则取商,即使以%f打印。
  • 移位操作符:>>、<< 等,移动的是二进制位。
  • 位操作符:按位与&、按位或|、按位异或^、按位取反~ 等。
  • 赋值操作符:=、+=、*=、%=、<<= 等 。
    单目操作符:++、–、!、强制类型转换、&、sizeof()等,注意sizeof不是 函数,括号内为变量时,可省略括号,为数据类型时不可省略。
  • 关系操作符:==、!=、>=、<= 等。
  • 逻辑操作符:&&、||
  • 条件操作符:exp1 ? exp2 : exp3;
  • 逗号表达式:exp1,exp2,exp3,…,expn;从左向右依次计算,表达式结果为最后一个表达式的结果。
  • 下标引用、函数调用和结构成员操作符:[]:数组访问元素 、():实际上,函数名后边的圆括号就是操作符。

几个易错操作符:

8.1 左移操作符

	int a = 2;
	int b = a << 2;
	printf("%d", b);

结果为:8。
位操作符操作的是二进制位,先将用int存储的2用二进制表示,共4*8=32bit:

00000000 00000000 00000000 00000010
左移两位:
00000000 00000000 00000000 00001000
1*2^3 + 0 + 0 + 0 = 8

8.2 取反操作符

	int a = 0;
	printf("%d\n",~a);

结果为:-1。
整数在内存中是以补码的形式存储,而打印出来的是原码,因此需要将补码转化为原码。
正数的原码、反码、补码相同;负数将其原码按位取反得到其反码,反码+1得到补码。

a:00000000 00000000 00000000 00000000
~a:11111111 11111111 11111111 11111111
此时的~a为补码形式,将其-1得到其反码:
[~a]反:11111111 11111111 11111111 11111110
符号位为1,负数,除符号位将其按位取反得到原码:
[~a]原:10000000 00000000 00000000 00000001 即 -1

8.3 区分&&与&

  • &&是逻辑运算,其两个操作数表示“真(非0)”或“假(0)”,将真假作与运算;
  • &是位运算,将两个操作数按位作与运算。
	if (1 && 2) {
		printf("true");
	}
	else {
		printf("false");
	}

1和2均为真,结果为真,即ture:

	if (1 & 2) {
		printf("true");
	}
	else {
		printf("false");
	}

1:00000000 00000000 00000000 00000001
2:00000000 00000000 00000000 00000010
1&2:00000000 00000000 00000000 00000000 即 0 ,为假
在这里插入图片描述

一百、结束

内容不全,以后会持续更新,欢迎探讨,若有错误还望各位批评指正!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 09:06:11  更:2021-11-26 09:07:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:23:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码