C语言
文章平均质量分 84
C语言相关知识点以及自己在学习C语言中遇到的小问题
Lzc_217
全力以赴
展开
-
贪吃蛇——C语言实践
本次实现贪吃蛇会使用到的一些Win32 API知识,接下来我们就学习一下。原创 2024-05-12 20:38:35 · 601 阅读 · 2 评论 -
预处理详解
C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。__FILE__ //进⾏编译的源⽂件__DATE__ //⽂件被编译的⽇期__TIME__ //⽂件被编译的时间__LINE__ //⽂件当前的⾏号__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义int main()//VS2022不遵循ANSI Creturn 0;#define reg register //为 register这个关键字,创建一个简短的名字;原创 2024-04-12 20:59:54 · 1377 阅读 · 20 评论 -
理解 编译和链接
程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留他们的值。这个阶段会报告错误的语法信息。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。就是根据汇编指令和机器指令的对照表一 一的进行翻译,也不做指令优化。• 处理#include 预编译指令,将包含的头文件的内容插入到该预编译指令的位置。这个过程是递归进行的,也就是说被包含的头文件也可能包含其他文件。链接是一个复杂的过程,链接的时候需要把一堆文件链接在一起才生成可执行程序。原创 2024-04-11 22:06:24 · 966 阅读 · 2 评论 -
C语言 文件函数
include //读文件--"r",fgetc,fgets,fscanfint main()return 1;pf = NULL;return 0;#include //读文件--"rb",freadint main()return 1;int i = 0;for (i = 0;i < 4;pf = NULL;原创 2024-04-07 23:07:18 · 853 阅读 · 0 评论 -
C语言 动态内存管理
C/C++程序内存分配的几个区域:1. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时 这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。2. 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。分配方式类似于链表。3. 数据段(静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。原创 2024-07-24 23:18:56 · 732 阅读 · 1 评论 -
C语言 联合和枚举
在C语言中是可以的(强制类型转换成枚举类型),但是在C++是不行的,C++的类型检查比较严格。像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以不同的类型。5. 枚举常量是遵循作用域规则的,枚举声明在函数内,只能在函数内使用。2. 和#define定义的标识符比较枚举有类型检查,更加严谨。联合的成员是共用一块内存空间的,这样一个联合变量的大小,给联合体其中一个成员赋值,其他成员的值也跟着变化。一周的星期一到星期日是有限的7天,可以一 一列举。中的内容是枚举类型的可能取值,也叫。原创 2024-04-02 23:01:30 · 750 阅读 · 1 评论 -
C语言 结构体详解
4. 当一个结构。原创 2024-04-01 21:36:12 · 1330 阅读 · 0 评论 -
整数和浮点数在内存中的存储
比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字。同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是 相同的,不需要额外的硬件电路。比如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。其实超过一个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们。原创 2024-03-30 12:50:36 · 981 阅读 · 1 评论 -
C语言内存函数
和memcpy的差别就是memmove函数处理的。,复制的结果都是未定义的。原创 2024-03-25 16:57:02 · 243 阅读 · 0 评论 -
深入理解指针3
int (*) (int x, int y) //pf3函数指针变量的类型。所以str1和str2不同,str3和str4相同。首先我们再次理解一下二维数组,二维数组起始可以看做是。parr1 先和 [] 结合,说明 parr1是数组。, 当几个指针指向同一个字符串的时候,他们实际会。这里实参是二维数组,形参也写成二维数组的形式。所以 p是⼀个指针,指向⼀个数组,叫。,那么形参也是可以写成指针形式的。| | p指向。和*结合,说明p是⼀个。| p是。原创 2024-03-24 23:44:27 · 900 阅读 · 2 评论 -
深入理解指针2
(单位字节)而不是数组的大小(单位字节)。正是因为函数的参数部分是本质是指针,所以在函数内部是没办法求的数组元素个数的。上述的代码模拟出⼆维数组的效果,实际上。数组首元素(第⼀个元素)的地址。//可以认为[]有解引用的作用。,parr[i]找到的数组元素。,又可以指向一块区域。原创 2024-03-23 21:31:25 · 376 阅读 · 1 评论 -
深入理解指针1
当指针变量指向⼀块区域的时候,我们可以通过指针访问该区域,后期不再使⽤这个指针访问空间的 时候,我们可以把该指针置为NULL。我们可以看出, char* 类型的指针变量+1跳过1个字节, int* 类型的指针变量+1跳过了4个字节。指针初始化 如果明确知道指针指向哪里就直接赋值地址,如果不知道指针应该指向哪里,可以给指针赋值。在指针类型中有⼀种特殊的类型是 void* 类型的,可以理解为。是C语言中定义的⼀个标识符常量,值是0,0也是地址,的指针(或者叫泛型指 针),这种类型的指针。原创 2024-03-21 14:36:23 · 524 阅读 · 1 评论 -
为什么数组传参时要把数组大小也传过去
不信的话:这里如果写成int str[40];用int str[]来接收,就只能一个小写变大写了。个字节,所以sizeof(str) 即这个指针大小 为。以上是我个人的理解,如果有什么不对的地方,还请大佬们指点。个字节,而sizeof(str[0])是一个。个字节,4/1 = 4,所以只有。,为一个指针大小,所以有问题。,但代码一中传过去的数组名是。,指针在32位平台上大小为。,应该用指针来接收,所以。sizeof(数组名)原创 2023-12-15 19:48:15 · 512 阅读 · 0 评论 -
关于while(--n)和while(n--)
以下是。原创 2024-03-23 20:23:58 · 492 阅读 · 1 评论 -
关于char arr 数组中隐藏的\0问题
当然写成 char arr1[] = { 'a','b','c','\0' };这种方式只对数组中的前两个元素初始化为01.而后8个元素系统会自动全部初始化。而后7个元素会自动全部初始化为0,可以看作空字符,即ASCII码为0的字符。这种方式没有定义数组的元素个数,系统会根据花括号中。在此对数组中的前三个元素初始化为 T,h, e,(’0‘才是字符0,值为48),注意:\0的ASC||值为0。这里"abc"中的\0没有读到。数据的个数决定数组元素的个数。,第四个元素初始化为0,即。以下用vs2022版本。原创 2023-11-30 17:21:34 · 715 阅读 · 0 评论 -
分支与循环中的小知识点(附猜数字游戏)
if(表达式1||表达式2||表达式3),当表达式1为真,不会执行表达式2和3,当表达式1为假,若表达式2为真,不会执行表达式3。一注意:如:if(a == 3)有些人会这样写if(3 == a),这样如果写成if(3 = a)时会报错,方便找错。二注意:多个关系运算符不宜连用,如:a原创 2023-12-02 20:49:32 · 832 阅读 · 1 评论 -
初识C语言的易错点1
这时必须输入什么-什么-什么,若想随便输入,可以写成是残废(“%d%*c%d%*c%d",&a,&b,&c),这时输入什么-什么-什么,什么——什么——什么等都可以。,结果就带有小数(如:5.0/2 = 2.500000,或为5/2.0,或5.0/2.0,我用vs2022默认为float型)注意:除%c以外,都会忽略起首的空白字符,若要跳过,scanf(" %c".&ch)%5d输出的宽度至少为5位,不够补0,默认右对齐,该数大于5位就打印全部。原创 2023-11-26 16:39:42 · 1036 阅读 · 1 评论