![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 60
Naunyang
不以物喜,不以己悲,天地本不全,奈何以全求之,不贪生,不惧死。
展开
-
C中的数据存储
一个函数的返回值是int16类型的。但当返回的参数值大于32767的时候是如何的现象。可以正常返回,接收返回值的变量可以容纳返回值即可。原创 2022-07-27 20:26:33 · 268 阅读 · 0 评论 -
C与指针第一章
1、注意格式,注意注释的格式/***这是一个C程序的注释**这一行也是**俺也是*/ 2、要从逻辑上删除一段C代码,更好的办法是使用#if指令。如下: #if 0 statements #endif3、预处理指令很强大,可能比我想象的还有强大。14章见。4、预处理指令#include<stdio.h> /*这一行的功能就会吧stdio.h文件中的内容逐字写到此处*/#include<string.h> /*同上*/#define MAX_CO原创 2022-01-06 20:17:40 · 395 阅读 · 0 评论 -
第十一章:字符串和字符串函数
C字符串和字符串函数原创 2022-01-06 19:54:00 · 806 阅读 · 0 评论 -
《深入C语言程序运行原理》第二课 于航
要点总结:一、数据量单位:位、字节和字1.1 位是计算机中共最小的存储单位。每一个为可以存储一个二进制码0或者1.而字节通常由8个位组成一个存储单元。在计算机中,字节是最小的可寻址单位,这意味着CPU在使用数据时,可以以字节为单位,为每一个字节内存分配一个相应的独立地址。1.2字的大小并不固定,注意是因为字的概念与具体的处理器或硬件体系架构直接相关,它跟位、字节这种较为通用和统一的数据量概念并不相同。一个字的大小可能是2的幂次个位,比如16位、32位、12位、27位等。二、汇编语言2.1在计算机编原创 2021-12-15 22:15:17 · 2479 阅读 · 0 评论 -
C语言中的内存布局
地址注释高局部变量·动态申请的内存空间··全局变量(未初始化)·静态变量(未初始化)·全局变量(初始化)·字符串常量低函数地址代码段:代码段:通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。数据段:数据段:通常用来存放已经初始化的全局变量和局部静态变量。BSS段:BSS段:(Block Starte...原创 2021-06-09 22:49:45 · 496 阅读 · 0 评论 -
存储类别、链接、和内存管理(一)
涉及内容:关键字:auto、extern、static、register、const、volatile、restricted(受限制的 保密的)、_Thread_local、_Atomic函数:rand()、srand()、time()、malloc()、calloc()、free()如何确定变量的作用域(可见范围)和声明周期(它存在多长时间)***** ********* ************************ ** * 好好理解"对象"这个概念。***原创 2021-06-08 10:36:18 · 194 阅读 · 2 评论 -
自己写一个参数可变的函数
参数可变的函数:#include <stdio.h>#include <stdlib.h>#include <stdarg.h>int sum(int n , ...);int sum(int n, ...){ int i, sum = 0; va_list vap; va_start(vap,n); for(i=0; i<n; i++) { sum += va_arg(vap, int);原创 2021-06-06 14:07:36 · 179 阅读 · 0 评论 -
void指针和NULL指针&指向指针的指针&指针数组
一、void指针和NULL指针void指针我们把它称为通用指针,就是可以指向任意类型的数据。也就是说,任何类型的指针都可以赋值给void指针。void类型指针,不要直接给void指针进行解引用。对一个NULL指针进行解引用是非法的,会引起段错误。当你还不清楚将指针初始化为什么地址时,请将它初始化NULL;在对指针解引用时,先检查该指针是否为NULL。NULL不是NUL 。NUL是ASCII字符表中的第一个字符。NULL用于指针和对象,表示指向一个不被使用的地址,而’\0’表示字符串的结尾。原创 2021-06-03 22:22:14 · 432 阅读 · 0 评论 -
*p++运行过程解读
*p++:执行流程:(1)p++。因为++的优先级高于。但是++是后置,所以先用p.(2)*p取值,值得注意的是:这里的p是++之前的值。第一步++之后用于下一次的使用。#include <stdio.h>#include <stdlib.h>#include <string.h>int main(void){ unsigned char a[] = "China NB Plus!"; unsigned char *p = a;原创 2021-06-02 16:55:55 · 1994 阅读 · 0 评论 -
字符串处理函数---很重要
1.字符串的定义:字符串就是一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。因此,字符串所包含的字符内部不能出现NUL字节。2.头文件包含:头文件string.h中包含了使用字符串函数所需要的原型和声明。3.字符串长度字符串长度就是所包含的字符的个数。库函数Strlen函数的原型如下:size_t strlen (char const * string)注意:strlen返回的是一个类型为size_t的值,这个类型是在头文件stddef.h中定义的,它是一个无符号整数类型。4.原创 2021-06-02 07:50:10 · 655 阅读 · 0 评论 -
C语言之结构体(二)
1嵌套结构struct name{ //第一个结构 char first[LEN]; char last[LEN];};struct guy{ //第二个结构 struct name handle; //嵌套结构 char favfoodp[LEN]; char job[LEN]; float income;};int main(void){ struct guy fellow = { //初始化一个结构变量 {“Ewen”,"Yang"}, "grilled sa原创 2021-05-10 22:00:52 · 603 阅读 · 12 评论 -
指针才是C语言的精髓
一、指针到底是什么?一般我们所说的指针其实指的是指针变量。那么既然是变量,指针其实说白了跟普通变量没有什么太大的区别。变量是存放数据的手段。指针变量也是如此,只不过变量存放的是地址。比如:int a = 10;int *p = &a; //p是一个int类型的指针上边这两句代码可以说:p指向了a的空间。本质上就是p中存放的是地址指向了空间a。准确的讲应该是:指针变量p里边存放的地址指向了空间a。二、变量空间的首字节地址,作为整个空间的地址实际上,内存中每一个字节空间都有一个地址原创 2021-05-09 16:28:45 · 259 阅读 · 1 评论 -
C语言中.与->的区别
首先他们两个是有区别的。看如下程序:在学习结构体方面的知识是注意到.与->了。在之前的意识中,两个没多大的差别。看下程序,分析下为什么,有时候用.有时候用->?其实要讨论这两者的区别,就涉及到了结构体指针与结构体变量来访问成员变量的问题了。#include <stdio.h>#include <stdlib.h>#define LEN 20struct name{ char first[LEN]; char last[LEN];};s原创 2021-05-09 10:11:27 · 4268 阅读 · 3 评论 -
C语言之结构体(一)
1、建立结构声明//该声明描述了一个由两个字符数组和一个float类型变量组成的结构。//该声明并没有创建实际的数据对象,只是描述了该对象由什么组成//(有时候我们成为模板)struct book //book是标记名,是可选的。{ char title[MAXTITL]; char author[MAXAUTL]; float value;}; //这样就创建了一个结构模板。//分析:关键字:struct 表明跟在其后的是一个结构,后边是一个可选的标记(本例中是book)。//原创 2021-05-07 22:40:31 · 206 阅读 · 0 评论 -
C/C++存储类别
本文介绍 C/C++ 中的存储类别。所谓的“存储类别”究竟是什么意思? 存储类别主要指在内存中存储数据的方式,其大致牵涉到变量的三个方面 —— 作用域、链接性和存储期,也就是说这三个方面决定了存储类别。下面先解释这三个概念,再介绍在 C/C++ 中的表示形式。存储类别定义作用域 (scope) 描述程序中可访问变量的区域,主要有块作用域 (block scope) 变量和 文件作用域 (file scope) 变量,平常我们也分别用局部变量和全局变量来指代这两者。这里需要注意的是,在 C/C++转载 2021-05-07 22:10:59 · 1521 阅读 · 1 评论 -
C语言基础值Switch case
1、多重选择:switch 和break2、基本格式1:每一个Case后边带有breakswitch(number){case 1: statement 1;break;case 2: statement 2;break;case 3: statement 3;break;case 4: statement 4;break;case 5:statement 5;break;case 6:statement 6;break;...case statementn;brea原创 2021-04-16 14:06:43 · 278 阅读 · 0 评论 -
c语言字符串长度,占用字节大小,存放位置等问题
参考文章:https://www.cnblogs.com/xmhsincere/p/4915354.html 1、三者长度strlen问题 int main () { char *str="xiaolong"; printf("%d\n",strlen(str)); return 0...转载 2021-03-26 13:12:04 · 2049 阅读 · 0 评论 -
2021-03-26
背景最近在项目中遇到了一个编译警告,是因为定义的变量为char[],而在使用时作为函数的unsigned char类型的参数调用。这个警告很容易避免,但是char和unsigned char*到底有什么区别呢,本文作一个简单的探讨。char 和 unsigned char 的区别在C中,默认的基础数据类型均为signed,如定义变量为int,long等,都为有符号的。如果要定义无符号类型,必须显式地在变量类型前加unsigned。char vs unsigned char相同点:在内存中都是一个字转载 2021-03-26 10:16:34 · 111 阅读 · 0 评论 -
16进制数转换成Float型数
单片机与传感器通信,标准的MODBUS RTU协议。到了数据解析部分,如何把4个字节的数据读出来,显示到屏幕呢?单片机收到一帧数据,放入数组中,进行数据的拼凑,4个字节拼凑成一个32位的int型数据。然后再进行解析。/*部分函数实现*///假如下边数组中收到的是传感器随机返回的一帧数据//协议解释:第一个字为地址 第二个字节为功能码 第三个字节为连续几个字节的数据//后边紧跟的是第三个字节长度的数据,最后两位位CRC校验 unsigned char uartRx_Buf[] = {0x01,原创 2020-10-12 20:50:26 · 3509 阅读 · 0 评论 -
第一章 C语言与内存
1、什么是程序?程序 = 数据 + 算法2、计算机运行程序的目的是什么?要么重视过程,要么重视结果,要么两者皆有。3、什么是内存?程序运行为什么需要内存?DRAM与SRAM的区别?内存相当于一个容器一样,要存储东西。计算机或MCU需要内存是要程序让存储于内存中并且让程序跑起来。SRAM:静态内存,速度快于DRAM,价格昂贵,一般用在CPU的一级缓存,二级缓存,要求特别高的地方;DRAM:价格相对于SRAM便宜一点,速度要比SRAM慢,DRAM又分为好多代。比如:SDRAM、DDR1 DDR2…原创 2020-09-05 10:25:50 · 375 阅读 · 0 评论 -
【C】switch-case里面,加或不加break的区别
int test;test = 0;switch(test) { case 0: test++; printf("value = 0"); // 打印printf,后续没有break代码,系统紧接着判断case 1 case 1: test++; printf("value = 1"); break; // 打印完printf,发现有break,跳出switch case 2: printf("value = 2"); //转载 2020-07-08 10:28:16 · 1326 阅读 · 2 评论 -
C语言中“流”与“文件”
原文链接http://blog.sina.com.cn/s/blog_507ec89d01009eo3.html 1 流的概念 “流是磁盘或其它外围设备中存储的数据的源点或终点。”。这是在《C程序设计语言》上的原话。据我的理解,流主要是指一种逻辑上的概念,它提供或存储数据。产生数据的叫输入流,消耗数据的叫输出流。至于怎么产生,又怎么消耗,这是一种物理上的实现,根据每种设备有所不同,但C语言中对它们一转载 2020-06-16 08:17:21 · 1610 阅读 · 0 评论 -
printf函数 重定义printf函数。
难的东西学不会是因为简单的知识没学好基础不牢,地动山摇《C primer Plus》第五章1 .运算符:表示算数运算1.1 有: = + - * /(C没有指数运算符,不过,可以使用C库提供的POW()函数用于指数运算。eg:POW(3.5 ,2.2),返回的就是3.5的2.2次幂)1.2赋值运算符 =num = 35; 表示的是把35赋给num这个变量。i = i+1; 表示把i的值加1,再赋值给i.1.3 右值,左值,数据对象的概念。例如:2002 = bwm; //无效,右值只能是转载 2020-05-21 23:08:37 · 7502 阅读 · 0 评论 -
main函数中的while(1)解读
单片机C语言的主程序,通常要用一个while(1)语句来让程序进入一个无限循环,目的是为了让程序一直保持在我们需要运行的情况下。 虽然这种做法毋庸置疑,在网上还是有不少朋友有疑问,如果程序不加while(1)会出现什么情况,对于这种好学精神,还是值得赞扬的,做学问就需要有追根问...转载 2020-04-27 08:26:17 · 12284 阅读 · 2 评论 -
C语言基础3
int const *P .const 等价于const int *P。这种修饰表示P所指向的空间是常量。不能被修改。但是P本身可以被修改。eg: int a = 10; int b = 20; int const *P = &a; //P指向了a *P = 100; //编译器会报错,因为P指向的空间不能被修改。 P = &b; //正确,P...原创 2020-04-26 20:54:13 · 151 阅读 · 0 评论 -
将一个浮点型的数通过串口发送出去
可能大家对发送字符串,整数,数组等待的没有问题,也想的明白,可是对于浮点型的数,或许有些不知所措(大佬绕过,小白我是这样)今天搞懂了,就记录下!其实发送原理还是通过字符串的形式发送出去的。只不过是我们将浮点型的数进行的拆解。ps:除运算与或运算不太懂的可以自己查查就可以了。假如一个浮点型的数 d = 25.6345879999我想将这个浮点型的数保留2位小数发送到串口,那我该怎么做呢?...原创 2020-04-10 15:03:27 · 7119 阅读 · 6 评论 -
C语言的存储类&生命周期&作用域&链接属性
【关键字:auto register extern static】一、存储类:变量的存储类型。 1、内存被分成:栈 堆 数据段 bss段 和text段等不同管理方法的内存段。 局部变量被分配与栈中。他的存储类就是栈。 2、被显式初始化为非0的全局变量分配在data段。那么该全局变量的 存储类就是data段。 3、显式初始化为0和没有显式初始化(默认为0)的全局变量...原创 2020-01-16 14:29:32 · 152 阅读 · 0 评论 -
内存空间 malloc函数
我好弱。我的知识还很匮乏。2020年1月7日 18:37:26内存分配之malloc()函数。是在程序运行的时候进行内存分配的。此函数接收一个参数:是所需的内存的字节数。malloc()函数分配内存,不会给我们一个类似于变量名的东西让我们去访问malloc()函数为我们申请的内存空间,而是为我们返回一个内存首地址指针给我们,所以我们可以通过指针的方式去访问这个内存。1.貌似(自己还在看书)m...原创 2020-01-07 19:14:08 · 264 阅读 · 0 评论 -
位操作。
我特么就是一菜逼。。很菜很菜的那种。。。。【笨的要死】C语言中的位运算有:(1)按位取反:~ 【就是1变0,0变1】(2)按位与:& 【1&1=1,1&0=0,0&1=0,0&0=0】【两位都为1就为1,有一位为0就为0】(3)按位或:|【1|1=1,1|0=1,0|0=0,0|1=1,有1就是1,两位都为0就为0】(4)按位异或:^ 【1 ^ 0...原创 2019-12-03 00:56:27 · 201 阅读 · 0 评论 -
sprintf函数
这几天总遇到sprintf,下面自己来小小地总结下~srpintf()函数的功能非常强大:效率比一些字符串操作函数要高;而且更具灵活性;可以将想要的结果输出到指定的字符串中,也可作为缓冲区,而printf只...转载 2019-08-03 09:01:43 · 486 阅读 · 0 评论 -
C语言流程控制之for while do..while
流程控制:【C语言中的重点】1.什么是流程控制:程序代码执行的顺序2.流程控制的分类:顺序执行 选择执行定义:某些代码可能执行,也可能不执行,有选择的执行某些代码if1.if的范围问题:if(表达式)语句A;语句B;解释:此时if只能控制语句A的执行与否,而不能控制语句B的执行与否2.if(表达式){语句A;语句B;}解释:此时if控制既语句A也控制语句B。3...原创 2019-07-03 21:05:52 · 318 阅读 · 0 评论 -
C语言基础知识1
C语言的学习要知道以下这些概念,才会帮你理解的更加透彻。1.内存内存可以理解为就是存放数据或者指令的一个容器。内存中有好多格子,定义一个变量就是把其中的某一个空闲的格子与这个变量以某种关系进行连接起来。(比如:int i = 2 ;) i 就是变量 。是int类型的。int一般占4个字节。那么就把2这个值放进了一个类型是int的格子里。2数据类型C语言中的基本数据类型有:(1)整型 ...原创 2019-06-24 23:41:27 · 326 阅读 · 0 评论 -
C语言基础2(运算符)
运算符:算数运算符: + - * /(除) %(取余)关系运算符:> < >= <= != ==逻辑运算符:!(非) &&(与)【两个都为真就为真】 ||(或)【一个为真就为真】C语言中真:非0就是真 0为假赋值运算符:= += -= *= /=&&左边表达式为假时,右边的表达式...原创 2019-06-26 21:28:52 · 346 阅读 · 1 评论 -
C语言中的自增与自减
自增【自减】: 分类:前自增++i 与 后自增i++ 区别: 相同:最终都使i的值加1 不同:前自增整体表达式的值是i加1后的值 后自增整体表达式的值是i加1前的值 #include <stdio.h> int main(void) { int i, j, k, m; i = j = 3; k = ++i;...原创 2019-07-01 23:54:02 · 1759 阅读 · 0 评论