C语言学习详解
文章平均质量分 87
学习C语言
momo小菜pa
momo
展开
-
C语言--程序环境和预处理(宏)
_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义int main()return 0;#define定义的变量,在预处理阶段就已经完成了替换。语法:#define reg register //为 register这个关键字,创建一个简短的名字;) //用更形象的符号来替换一种实现。原创 2023-10-22 14:08:12 · 559 阅读 · 10 评论 -
C语言--好题
答案解析:puc是一个char数组,每次跳转一个字节,结构体不是,它只有第一个元素单独享用一字节,其他三个元素一起共用一字节,所以puc被结构体填充后,本身只有两个字节会被写入,后两个字节肯定是0,至此AD排除,然后第一个字节是2就是2了,第二个字节比较麻烦,首先ucData0给了3其实是越界了,1位的数字只能是0或1,所以11截断后只有1,同理ucData1给的4也是越界的,100截断后是00,只有5的101是正常的。有数组的元素是:1,2,3,4,5,1,2,3,4,6。下面代码的结果是( )原创 2023-10-15 16:50:08 · 205 阅读 · 7 评论 -
C语言--文件操作(2)
在上篇我们学习了文件操作的相关函数,今天我们就来探索二进制文件和文件缓冲区的知识。原创 2023-10-10 15:20:18 · 96 阅读 · 6 评论 -
c语言--文件操作(1)
磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。原创 2023-10-08 20:10:39 · 106 阅读 · 4 评论 -
C语言--动态内存开辟笔试题
请问运行Test 函数会有什么样的结果?题目解析:这段代码会发生崩溃。我们将str传给函数GetMemory,对str进行动态内存开辟,此时str指向了空间p,注意此时p只是形参,因此当程序出函数GetMemory后,str的值不会发生任何改变,同时,动态开辟的内存p不会被回收,这就造成了内存泄漏。紧接着程序将进入strcpy函数,此时str为NULL,这时候strcpy函数仍然会对str进行解引用操作,对空指针进行解引用操作就会导致程序发生崩溃。原创 2023-09-30 17:39:35 · 72 阅读 · 3 评论 -
C语言--动态内存管理(malloc,free,calloc,realloc)
但是上述的开辟空间的方式有两个特点:1. 空间开辟大小是固定的。2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道, 那数组的编译时开辟空间的方式就不能满足了。这时候就只能试试动态存开辟了。原创 2023-09-26 17:09:18 · 125 阅读 · 7 评论 -
C语言--memcpy函数,memmove函数
在C语言中,memmove函数用于将一段内存中的数据移动到另一段内存中。与memcpy函数不同的是,memmove函数可以处理源内存区域和目标内存区域有重叠的情况。它接受三个参数:目标内存的指针、源内存的指针以及要移动的字节数。这个函数非常有用,特别是在需要在内存中重新排列数据或处理重叠内存区域时。原创 2023-09-22 18:49:26 · 374 阅读 · 3 评论 -
C语言--指针进阶3
在上篇我们学习了回调函数的经典案例qsort,今天,我们将尝试模拟实现qsort。原创 2023-09-14 20:31:30 · 72 阅读 · 3 评论 -
C 语言--指针进阶2
承接上篇,在上篇已经分享了(字符指针,指针数组,数组指针,数组和指针的传参以及函数指针),今天我将与大家分享指针新的内容。原创 2023-09-07 21:37:36 · 67 阅读 · 1 评论 -
C语言实现三子棋小游戏
电脑下棋是随机的,所以需要通过调用函数rand()来生成随机数,但是使用rand()函数之前要先调用srand((unsigned int )time(NULL))函数生成随机数生成器,rand()生成的随机数范围在0~32767,所以需要对rand()%row,rand()%col;对于玩家下棋需要注意:当玩家落子的时候所看见的行列,与数组的实际行列是不符合的,所以对于玩家落子的操作,要对行列进行-1,必进不是每个人都是程序员,我们需要联系实际生活,让我们设计出的产品更普适化。原创 2023-07-25 14:23:25 · 93 阅读 · 0 评论 -
C语言--深度剖析数据在内存中的存储
前面我们已经学习了基本的内置类型:以及他们所占存储空间的大小。 1.1 类型的基本归类: 整形家族:之所以将char也归类到整型,是因为字符在内存中存储的是字符的ASCLL码值,ASCLL码值是整型。 浮点数家族: 构造类型(自定义类型):指针类型 :空类型:我们知道为 a 分配四个字节的空间。 那如何存储? 下来了解下面的概念: 2.1 原码、反码、补码 对于整形来说:数据存放内存中其实存放的是原创 2023-08-07 15:37:32 · 105 阅读 · 0 评论 -
C语言--指针
指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。那这里的问题是:* 一个小的单元到底是多大?1个字节)原创 2023-08-01 09:17:56 · 107 阅读 · 1 评论 -
C语言实现扫雷小游戏
在这里我们使用字符数组的原因是:当我们排查雷的信息时,需要显示目标位置周围雷的数量,而字符’0’的ASCII码是48,字符‘1’的ASCII码是49,我们把目标位置周围的坐标加起来然后减去字符‘0’x8,就得到了该目标位置雷的数量,然后把该字符数量显示到show数组中。可以将游戏板数组保存为游戏的初始状态,而显示板数组则用来记录玩家的操作和游戏进展,从而实现游戏的暂停、继续和重开等功能。5. 方块揭开:当玩家选择揭开某个方块时,我们需要根据周围的方块来计算该方块上的数字,并揭开相应的方块。原创 2023-07-26 17:41:32 · 139 阅读 · 1 评论 -
C语言--指针的进阶
数组指针是指针?还是数组?答案是:指针。我们已经熟悉:整形指针:int * pint;能够指向整形数据的指针。浮点型指针:float * pf;能够指向浮点型数据的指针。那数组指针应该是:能够指向数组的指针。下面代码哪个是数组指针?原创 2023-08-10 17:10:30 · 148 阅读 · 4 评论 -
C语言--strcmp函数,strcat函数,strcpy函数详解及实现
strcmp函数是用来比较两个字符串大小的函数,需要引用头文件<string.h>。strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCLL码比较标准规定:第一个字符串大于第二个字符串,则返回大于0的数字第一个字符串等于第二个字符串,则返回0第一个字符串小于第二个字符串,则返回小于0的数字strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容。原创 2023-09-21 17:07:11 · 15709 阅读 · 0 评论 -
C语言--结构体基本用法
本章让我们初步认识和使用结构体,但不会深入解读。原创 2023-08-01 17:39:36 · 1284 阅读 · 3 评论 -
C语言--指针面试笔试题
前面几章我们学习了指针的知识,今天一起来做一组与指针相关的面试笔试题吧。原创 2023-09-19 15:10:02 · 184 阅读 · 4 评论 -
C语言--const在不同位置下的作用
如果const在*前后都有,则指针就是真的是一个“只读”指针了,既不能通过指针形式修改指针指向的值,也不能修改指针所指向的位置。如果const在的后面,则可以通过指针形式修改指针指向的值,但是不能修改指针所指向的位置。如果const在的前面,则可以通过指针修改位置,但是不能以指针的形式修改指针指向的值。这样表示pt既不可以通过指针的形式修改指向的值,也不可以修改指针指向的位置。const放在最前面表示不能通过指针的形式修改指针所指向的值。如果通过指针的形式修改编译器会报错。原创 2023-08-03 17:17:27 · 273 阅读 · 0 评论 -
C语言--实用调试技巧
一个"bug"是指计算机程序或系统中的错误或缺陷。它可能导致程序无法按照预期的方式运行,产生意外的行为或错误的结果。Bug可以出现在各种不同的情况下,例如:1. 语法错误:这是最常见的错误类型,通常是由于拼写错误、缺少分号、括号不匹配等导致的。2. 逻辑错误:这种错误发生在程序的逻辑流程中,导致程序在某些情况下无法正确处理数据或执行预期的操作。3. 内存错误:当程序访问未分配的内存、释放已分配的内存或访问已释放的内存时,会发生内存错误。原创 2023-08-02 10:00:00 · 181 阅读 · 2 评论
分享