C语言
文章平均质量分 86
C语言学习
夏微凉.
第十五届蓝桥杯JavaB组国一,阿里云专家博主, 大三在读学生,计算机科学与技术专业,热爱编程和分享知识,欢迎一起交流和学习~
展开
-
【C语言】位段,枚举和联合体详解
什么是位段位段的声明和结构体是类似的,有两个不同:1.位段的成员必须是 int、unsigned int 或 signed int 。2.位段的成员名后边有一个冒号和一个数字。原创 2023-08-22 21:17:19 · 2005 阅读 · 152 评论 -
【C语言】什么是结构体内存对齐?结构体的大小怎么计算?
结构体内存对齐(Struct Memory Alignment)是指编译器在分配结构体变量的内存空间时,按照一定规则对结构体成员进行排列,以保证结构体的访问效率和内存对齐要求。在计算机中,访问内存的速度是有限的,而且通常是按照特定的字节大小进行的。为了提高内存访问的效率,许多计算机体系结构要求特定类型的数据在内存中的地址必须是某个特定值的倍数。这个特定值通常是数据类型的大小或者是处理器的字长。原创 2023-08-20 22:23:30 · 1381 阅读 · 91 评论 -
【C语言】字符函数和字符串函数
拷贝num个字符从源字符串到目标空间。如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。使用示例int main()return 0;原创 2023-08-19 16:26:05 · 2095 阅读 · 87 评论 -
【C语言】指针进阶(3)
数组名的意义:1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。3. 除此之外所有的数组名都表示首元素的地址。原创 2023-07-22 21:07:53 · 1191 阅读 · 104 评论 -
【C语言】指针进阶(2)
void*的指针是无具体类型的指针,这种指针是不能直接解引用的,也不能直接进行运算。但它。原创 2023-07-21 13:07:58 · 1085 阅读 · 64 评论 -
【C语言】指针进阶(1)
数组指针是指针?还是数组?答案是:指针。整形指针——指向整形变量的指针,存放整形变量地址的指针变量。字符指针——指向字符变量的指针,存放字符变量地址的指针变量。数组指针——指向数组的指针,存放的是数组的地址。下面代码哪个是数组指针?int (*p)[10]是数组指针。原创 2023-07-20 10:09:47 · 905 阅读 · 106 评论 -
【C语言】函数栈帧的创建与销毁
今天我们要学习的是函数栈帧的创建与销毁,学完这部分内容,我们可以解决下面的几个问题:局部变量是怎么创建的?为什么局部变量的值是随机值?函数是怎么传参的?传参顺序是怎样的?形参和实参是什么关系?函数调用是怎么做的?函数调用是怎么做的?函数调用结束后是怎么返回的?学习函数栈帧的创建与销毁不仅可以学习到这些知识,还能修炼自己的内功,也能搞懂后期更多的知识。进入正题.今天讲解的时候,使用的环境是VS2013,不要使用太高级的编译器,越高级的编译器,越不容易学习和观察。原创 2023-06-17 20:05:24 · 1651 阅读 · 76 评论 -
【C语言】数据在内存中的存储
前面我们已经学习了基本的内置类型:以及他们所占存储空间的大小。其中int表示的数据范围:short表示的数据范围:1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。2. 如何看待内存空间的视角.大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址 中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。为什么会有大小端模式之分呢?原创 2023-06-04 23:28:09 · 1677 阅读 · 111 评论 -
【C语言】assert和const的用法
注意:定义了指向常变量的指针变量p并使它指向了c1,并不意味着把c1也声明为常变量,而只是在用指针变量访问c1期间,c1具有常量的特征,其值不能改变,其他情况下,c1仍然是一个普通的变量,其值是可以改变的。总结:指向常变量的指针变量除了可以指向常变量,还可以指向未被声明为const的变量,此时可以通过指针变量访问该变量,但不能通过此指针变量改变该变量的值。,如果一个变量已经被声明为常变量,不能用它进行初始化别的变量,而且只能用常变量的指针去指向它,而不能用一般的非const类型指针变量去指向它。原创 2023-05-23 20:47:26 · 1501 阅读 · 48 评论 -
【C语言】经典面试题
经过我们不断地按f11键,我们发现arr[12]的值总是和i的值一起变化,我们猜测i和arr[12]是占用同一块内存空间的。不少伙伴都认为执行这段代码会打印13次“hehe”然后程序就崩溃(数组越界访问)了,带实际运行结果是什么呢?我们发现程序并没有出现崩溃的现象,而是在持续不断的打印出“hehe”,这是为什么呢?有这样一段代码,分析在VS编译器的运行结果。原创 2023-05-23 18:46:51 · 718 阅读 · 47 评论 -
【C语言】求二进制位中一的个数
NumberOf1函数的实现比较简单,它使用了一个循环,不断将n除以2,并判断余数是否为1。然后,将n右移1位,继续进行下一轮循环,直到n的二进制表示中所有位都被访问过。需要注意的是,在统计有符号整数的二进制表示中1的个数时,应该考虑符号位的影响。NumberOf1函数的实现比较简单,它使用了一个for循环,对于n的二进制表示中的每一位进行检查。使用Brian Kernighan算法来统计一个整数的二进制表示中1的个数的时间复杂度为O(log n),比其他方法都要更加高效,因为它跳过了很多不必要的计算。原创 2023-05-20 08:42:32 · 555 阅读 · 49 评论 -
【C语言】结构体初阶
结构体变量的定义和初始化可以分别进行。结构体变量的定义可以像定义其他变量一样进行,使用结构体的名称作为新定义的类型。例如,假设我们有以下结构体定义:我们可以定义一个新的结构体变量s,如下所示:这将在内存中分配足够的空间来存储student结构体的两个成员变量。可以使用点号运算符为结构体的成员变量赋值或访问这些变量。原创 2023-05-19 21:10:16 · 721 阅读 · 46 评论 -
【C语言】指针初阶
在 C 语言中,指针是一种特殊的变量,能够存储另一个变量的内存地址。指针变量可以用来访问、修改存储在内存中的数据。将一个变量的地址存储在指针变量中,可以通过解引用操作符(*)来访问指针所指向的变量的值。例如,可以通过以下方式声明和使用一个整型变量和一个指向该变量的指针:原创 2023-05-19 15:09:08 · 751 阅读 · 47 评论 -
【C语言】表达式求值中类型转换和优先级
表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度 一般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长 度。所以,表达式中各种长度可能小于int长度的整型值,都必须先转 换为 int 或 unsigned int,然后才能送入CPU去执行运算。取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。C的整型算术运算总是至少以缺省整型类型的精度来进行的。原创 2023-05-14 18:43:43 · 1274 阅读 · 54 评论 -
【C语言】操作符详解
对一个数的补码二进制位取反,包括符号位扩展:将二进制某一位由0改成1,1改成0的方法。原创 2023-05-14 10:23:31 · 707 阅读 · 52 评论 -
【C语言】数组
1. 数组是使用下标来访问的,下标是从0开始。2. 数组的大小可以通过计算得到。原创 2023-05-11 13:57:37 · 1164 阅读 · 73 评论 -
【C语言】扫雷小游戏(递归展开版)
想必大家都玩过扫雷这款小游戏吧?在一个棋盘上随机摆放数个雷,这些雷用户无法看见,只能一个个将雷排查出来,用户点击一个格子,如果这个格子含有雷,游戏就以失败告终,如果这个格子不是雷,就会在这个格子上显示周围8个格子共有多少个雷,如下图:今天我们就用C语言来实现这个扫雷小游戏。原创 2023-05-10 18:10:54 · 2229 阅读 · 70 评论 -
【C语言】三子棋小游戏
哈喽,大家好,今天我们要利用之前所学习的C语言知识来写一个三子棋小游戏。原创 2023-05-07 21:39:08 · 815 阅读 · 42 评论 -
【C语言】函数与递归
如果库函数能干所有的事情,那还要程序员干什么?所以更加重要的是自定义函数。自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间自定义函数和库函数一样,有函数名,返回值类型,函数参数我们举一个例子:写一个函数可以找出两个整数中的最大值。a : b;return 0;写一个函数可以交换两个整型变量的内容:x = y;y = tmp;原创 2023-05-01 20:51:59 · 905 阅读 · 21 评论 -
【C语言】猜数字小游戏
rand()产生随机数时,如果用srand(seed)播下种子之后,一旦种子相同(下面的getpid方法),产生的随机数将是相同的。当然很多时候刻意让rand()产生的随机数随机化,用时间作种子。,这样每次运行程序的时间肯定是不相同的,产生的随机数肯定就不一样了。c> 猜对了,提示 :恭喜你,猜对了,结束游戏。a> 猜大了,提醒猜大了,继续猜。b> 猜小了,提醒猜小了,继续彩。将代码写成函数的形式可以减少代码的重复。设定了一个值,如果有那么它会自动调用。函数每次调用前都会查询是否调用过。原创 2023-04-23 22:31:30 · 817 阅读 · 13 评论 -
【C语言】分支和循环语句
C语言中的语句大致可分为下面五类:1. 表达式语句2. 函数调用语句3. 控制语句4. 复合语句5. 空语句其中,我们今天主要讲的是控制语句,控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选 择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。可分成以下三类:1. 条件判断语句也叫分支语句:if语句、switch语句;2. 循环执行语句:do while语句、while语句、for语句;原创 2023-04-22 21:51:07 · 608 阅读 · 32 评论 -
【C语言】static的用法
static修饰局部变量static修饰局部变量改变了变量的生命周期 让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。static修饰全局变量一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使 用。static修饰函数一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。原创 2023-04-14 22:11:13 · 714 阅读 · 32 评论
分享