C语言细节
文章平均质量分 51
深挖C语言编程细节
顾冷__
克服虛荣心、炫耀欲,你要对付的是你时刻想要出风头的小聪明
展开
-
C语言详解|float类型 数据的储存的存储方式详解
浮点数的储存规则浮点数与实型数据的存储方式是不同的 num 和 *pFloat 在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别这么大? 还是要关注计算机内部的储存方式浮点数在内存中的储存方式根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:(-1)^S * M * 2^E(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。M表示有效数字,大于等于1,小于2。2^E表示指数位。IEEE 754规定:对于32原创 2021-11-03 20:48:49 · 1973 阅读 · 14 评论 -
函数解析|memset()函数的原理
文章目录1.函数原理 两个特例2.日常方法2.1初始化字节2.2 初始化其他数据类型2.3 初始化结构体1.函数原理 在初识memset函数中,我们简单提到了memset函数引用的是string.h 头文件,从这里我们可以看出,这是一个为字符类型设置的函数,那么他是怎么实现的? 先看一下源码void *(memset)(void *s, int c, size_t n) { const unsigned char uc = c; unsigned char *原创 2021-10-12 15:42:28 · 3119 阅读 · 11 评论 -
C/C++|数组定义在main内外的区别
一直习惯先写main函数,然后变量都写在main函数里面并且也没什么bug出现但是最近发现基本上讲竞赛代码的书和博客都将数组写在main函数的外面。如果一个数组并不是全局数组,他的作用域就只在main函数里面,为什么还要写在main函数的外面呢?之前一直接在main函数里面对数组进行定义。直到一次运行的时候,代码并没有问题,但是每次运行的时候都会出现停止工作的问题。测试了很久才发现是因为把数组开在了main函数里面的问题那么把数组开在main函数的里面和外面到底有什么区别?问题来自于开数组的区域不原创 2021-10-09 15:21:39 · 3956 阅读 · 9 评论 -
一维数组和二维数组的传参问题
当我们在数组进行传参的时候,一位数组和二维数组的传参具体是不相同的.因为如果我们需要将数组传入一个自定义函数去实现某些功能并且修改数组的内容时,会涉及到&传址操作,将数组的地址进行传入,一维数组可以直接 &arr[数字] 进行传参但是二维数组的构成元素是一维数组,所以传址的时候是 arr[j-1]的 方式进行传址特别要注意这里是进行行指针的传送,而不是列指针...原创 2021-09-26 13:07:42 · 442 阅读 · 3 评论 -
C语言|putchar()与printf()函数的区别
简单来说:putchar 只可以打印单个的字符 即 'A' 但是printf 可以打印各种类型 单个字符(%c),字符串(%s) 十进制整数(%d)换言之:printf 可以输出一个任意的字符串,还可以有参数,而putchar只能输出一个字符。并且,当打印单个字符的时候, printf("%c",'A') 相当于 putchar('A');简言之:printf 更牛逼,可以打印各种类型但是getchar,putchar只是处理字符的函数...原创 2021-09-13 20:01:26 · 2753 阅读 · 9 评论 -
C语言| 关于关键字sizeof和函数strlen的区别
char arr1[] = “abc”;char arr2[] = { ‘a’,‘b’,‘c’ }; 结果1>> printf("%d\n", sizeof(arr1)); 42>> printf("%d\n", sizeof(arr2)); 33>> printf("%d\n", strlen(arr1)); 34>> printf("%d\n", strlen(arr2));原创 2021-09-12 21:28:47 · 232 阅读 · 0 评论 -
ASCALL码表对照表 最全、最成体系表格 与对比
根据目前定义:目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。并且特别要注意:在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程原创 2021-09-04 22:01:07 · 22687 阅读 · 1 评论 -
关于定义二维数组时,为什么可以省略行,而不可以省略列
最近在复习c语言,看到二维数组的定义时,有省略行的定义方法,如arr[][10],但为什么没有省略列的定义方法呢?我个人理解是:将一个二维数组看成若干一维数组,每一行就是一个一维数组,而二维数组的列就代表每个一维数组中可以存在多少个元素,只有确定每个一维数组存放多少个元素才能正确定义二维数组,如果省略列的定义,那么操作系统不知道每个一维数组要分配多少个元素,有可能是平均分配,有可能全都给第一个一维数组分配,这就造成了歧义。相反,如果省略行但不省略列,操作系统会根据所给二维数组大小及列数自动分配出行数,不原创 2021-09-08 18:30:39 · 6994 阅读 · 1 评论 -
<C语言>| 关于scanf读取缓存区的理解
文章目录前言scanf函数的定义:功能:执行格式化输入总结解决方法前言在牛客做了很多坑爹的题,明明代码没问题但是就退无法AC,看了很多题解之后,发现是scanf读取缓存区,在输入输出时出现了问题 于是写个博客总结一下首先我们要了解什么是 scanf 函数根据 cplusplus.com的解释scanf函数的定义:scanf()函数是通用 终端格式化输入 函数,它从标准输入设备(键盘)读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为:scanf(原创 2021-09-11 18:29:00 · 1455 阅读 · 20 评论 -
关于函数的声明、调用以及定义の二次理解
文章目录引言初识 定义、声明调用及定义、声明的关系总结:引言最近学校上课的时候提到了函数的声明,定义和调用有很多小伙伴(包括我)在内在第一次听到的时候都表示一头雾水那么接下来详细解释一下什么叫函数的声明、定义和调用初识 定义、声明通俗点来说,声明 就是 和 编译程序 打一声招呼,让它知道有一个机器的存在(举例)即可eg:声明一个函数 int Add(a,b); 此处的a,b就是你传入需要执行加法的两个值,定义 就是 给一个函数 一个具体的 详细的 解释 就像是给一个机器设置原创 2021-09-11 17:40:46 · 669 阅读 · 9 评论 -
关于printf(“%[tag]m.nf“) ——标准格式化输出の详解
回顾C语言的时候发现一个比较基础性的知识,但网上很少人讲,并且也关系到了在线OJ的输入输出技巧,所以写个博客帮助大家理解标准格式化输出首先我们要了解,转换说明由什么构成转换说明由: % + 0标志 + 最小字符宽度 + 精度 + 转换说明符 等构成printf("%m.nf") 就以这个为例关于组成元素的含义:(0) -> 0标志 --> 如果有0标志,则有空补空变为有空补0原创 2021-09-08 21:34:34 · 934 阅读 · 5 评论