C语言
文章平均质量分 59
C语言小知识点整理,包括C语言里面东西和C++里面东西的一些区别,都会写到这个专栏里。
孟小胖_H
本人博客大部分都是在复习中整理的,主要用于记录笔记,其中也记录了一些个人观点和思考,欢迎指点,一起共同学习进步。
展开
-
define趣谈——“#define false true“ 和 “#define true false“
今天在“某脉app”上看见一个有点幽默的帖子,在这个“脉某app”上的楼主问:“怎样才能向别人证明你精通C语言?”,一个人回答:“#define false true”。好一个“黑即是白”。但是当我延申测试的时候,却发现了在define的使用上我一直以来的误区。...原创 2022-06-05 17:47:15 · 1315 阅读 · 0 评论 -
C语言——逗号表达式
一、基本知识百度百科:“逗号表达式,是C语言中的逗号运算符,优先级别最低,它将两个及其以上的式子连接起来,从左往右逐个计算表达式,整个表达式的值为最后一个表达式的值。”总结基本规则:①逗号表达将两个及其以上的式子连接为一个表达式。②逗号表达式按照从左向右的顺序计算每个子表达式的值③逗号表达式的最后一个子表达式必须有返回值,因为整个表达式的值是最后一个子表达式的值。其余子表达式可以没有返回值。二、示例演示1.示例一int main(){ int a = (1 * 2, 2 * 3, 3 *原创 2021-12-20 18:42:20 · 18219 阅读 · 4 评论 -
static关键字的用法及作用
在 C 语言中,static 主要定义全局静态变量,定义局部静态变量,定义静态函数。在 C++语言中新增了两种作用:定义静态数据成员或静态函数成员。一、 定义全局静态变量在全局变量前面加上关键字 static,该全局变量变成了全局静态变量。全局静态变量有以下特点:(1) 在全局数据区内分配内存(2) 如果没有初始化,其默认值为 0(3) 该变量在本文件内从定义开始到文件结束可见二、 定义局部静态变量在局部静态变量前面加上关键字 static,该局部变量便成了静态局部变量。静态局部变量有以下特原创 2021-10-03 10:36:44 · 554 阅读 · 0 评论 -
malloc、calloc、realloc和free
C 语言中开辟动态内存的有三个函数,分别为 malloc,calloc,realloc,释放内存的只有一个函数 free。realloc的使用是最容易犯错的,在写这篇博客前老师让我把realloc的使用和注意事项仔细搜资料看看,在网上看了几篇博客之后还是决定写一篇博客,把这些东西都记录下来。测试程序是否有内存泄漏推荐使用开源工具 vld,vld的安装和使用点击此处1.malloc的使用malloc 使用的最频繁,因为它最简单,只需要一个参数,即需要动态开辟的内存的字节数,如果堆里的连续空间能满足需要原创 2021-10-01 18:03:34 · 439 阅读 · 0 评论 -
extern用法
1.extern+变量,extern+函数extern 最简单的用法就是在一个文件中引用另一个文件中的变量或者函数。首先我们要知道一个概念:声明可以有多次,定义只能有一次。1.1extern+变量先来谈谈extern+变量。① int a;② int a = 0;③ extern int a = 0;④ extern int a;对于①②③来说,都是定义一个变量。而且②和③效果一摸一样,都是定义一个变量a并且初始化为0。对于④来说,这是一个声明。声明其他文件有这个变量。随便写一个函数,外原创 2021-10-01 13:07:38 · 4629 阅读 · 0 评论 -
结构体问题
1.结构体非空问题结构体在C语言里不允许是空的(但是在C++允许,而且是一字节大小)。一般情况下都说在C++里结构体和类没什么区别,但是在网上搜一下,发现深究还是有区别的(结构体与类区别优秀博客点击这里)。2.求解结构体大小问题1.先确定实际对其单位。CPU周期、结构体最大成员、预编译指令(#pragma pack(n)手动设置n,只能填1 2 4 8 16)三者中最小的为实际对齐单位。一般32位系统默认4字节对齐,64位系统默认8字节对齐。2.除去结构体第一个成员外,其他所有成员的地址相对于结原创 2021-09-29 09:24:12 · 223 阅读 · 0 评论 -
内联函数和宏定义
1.内联函数和宏定义的区别内联函数和普通函数相比可以加快程序的运行速度,在编译的时候内联函数可以直接镶嵌到目标代码中,而宏只是一个不加任何检查的简单的替换。内联函数要做参数类型检查。宏不是函数,只是在编译预处理阶段将程序中的有关字符串替换成宏体。inline是嵌入代码,在调用函数的地方直接把代码写到这个地方,而不用中断调用。对于短小的代码来说,inline增加空间消耗,换时间效率,也就是我们常说的空间换时间。但是inline需要根据具体情况来选择是否需要使用。2.内联函数的使用情况内联函数一般用于以原创 2021-09-29 08:27:13 · 805 阅读 · 0 评论 -
define、const、typedef区别
1.define与const的区别define生效与预处理阶段,const生效与编译阶段。预处理在编译之前,预处理器将代码中的宏统一替换为指定的字符 。从语义上讲,const是声明一个不可修改的数据,而define则是在对源代码进行替换。const定义的常量,在C语言中是储存在内存中、需要额外的内存空间的。只有c++才不会为其分配内存,而是将其储存在符号表中使得它成为一个编译期间的常量。define定义的常量运行时是直接的操作数(即汇编语言指令的一个字段),并不会存放在内存中。2.define与typ原创 2021-09-27 14:18:40 · 417 阅读 · 0 评论 -
C语言文件处理
声明:本博客为参考他人博客和C语言书籍整理的,仅作为复习学习用,如有侵权,本人可即刻删除1.文件与流1.1文件C语言中,文件是一个按顺序组成的字节流。文件会以文件结束标记(EOF)标记文件的结束。文件分为文本文件和二进制文件两种:(1)文本文件是以字符编码的方式进行保存的。多是顺序存取方式。顺序读取也就是从上往下,一笔一笔读取文件的内容。保存数据时,将数据附加在文件的末尾。这种存取方式常用于文本文件,而被存取的文件则称为顺序文件。扩展名为.txt的为文本文档。(2)二进制文件适用于非字符为主的数原创 2021-09-27 13:53:44 · 446 阅读 · 0 评论 -
fgets函数与gets函数
首先来看看函数原型:char* fgets(char *s, int n, FILE stream);char gets(char *s);可见fgets要传入参数n,即读入多少个字符,而gets并没有这个限制。在这里显而易见,fgets读入多少字符我们自己传参,不会造成越界的问题。但是gets会把我们给的字符一直向数组s中读入,很容易产生越界问题。fgets函数要注意:fgets()只读取n-1个字符。所以,fgets()读取到换行符、文件尾或读完n-1个字符便会进行返回。fgets代码如下:原创 2021-09-19 09:45:54 · 504 阅读 · 0 评论 -
C语言数组越界问题
首先C语言数组越界我们都知道,当我们定义了一个arr[5]数组,首先我们要知道C语言对数组越界访问不会进行检查,也就是说我们访问越界的话,一般不会发生报错。但是如果我们越界的同时,修改区间的值,就会编译通不过。但是事实有时候并非如此。下面主要以代码运行说明:1.访问越界首先,我们看看访问越界的情况:#include<stdio.h>int main(){ int arr[5] = { 1,2,3,4,5 }; int brr[5] = { 6,7,8,9,10 }; print原创 2021-09-19 09:21:32 · 4898 阅读 · 1 评论