![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
路过的小熊~
有限的时间做有用的事
展开
-
static __INLINE 内联函数
static __INLINE 内联函数转载 2024-01-14 14:21:13 · 724 阅读 · 0 评论 -
CMake基础教程
CMake基础教程原创 2023-06-22 21:05:32 · 382 阅读 · 0 评论 -
C语言多级菜单框架
c语言多级菜单切换转载 2023-06-18 19:52:26 · 1425 阅读 · 0 评论 -
BCD码与16进制互转算法
BCD码与16进制互转算法转载 2022-11-24 17:03:29 · 1633 阅读 · 0 评论 -
uin8_t uint16_t uint32_t相互转换
uin8_t uint16_t uint32_t相互转换转载 2022-11-24 16:34:33 · 3599 阅读 · 0 评论 -
10进制和16进制 数字和ASCII码互转
10进制和16进制 数字和ASCII码互转原创 2022-11-09 14:57:07 · 1983 阅读 · 0 评论 -
BCD与ASCII码互转-C语言实现
BCD与ASCII码互转-C语言实现转载 2022-11-09 14:25:18 · 1233 阅读 · 0 评论 -
C语言编程常见规范
C语言编程常见规范原创 2022-10-24 21:38:55 · 2578 阅读 · 1 评论 -
c语言之md5加密算法使用示例
c语言之md5加密算法使用示例原创 2022-09-24 21:22:56 · 123 阅读 · 0 评论 -
c语言实现字符串逆序排列
c语言实现字符串逆序排列原创 2022-07-26 10:57:56 · 505 阅读 · 0 评论 -
C 实现 删除字符串空白符
C 实现 删除字符串空白符原创 2022-07-26 10:44:57 · 118 阅读 · 0 评论 -
c语言调试关键字
c语言程序调试关键字汇总转载 2022-07-11 20:59:45 · 102 阅读 · 0 评论 -
C语言volatile的作用及使用场景介绍
帮助读者灵活掌握volatile的用法转载 2022-06-16 16:33:09 · 6343 阅读 · 1 评论 -
关于C语言函数返回数组问题
关于c语言返回数组的问题原创 2022-06-01 15:13:27 · 1050 阅读 · 0 评论 -
C语言处理全局变量过多、高内聚、低耦合的一种方式
C语言处理全局变量过多、去耦合的一种方式转载 2022-06-01 14:20:03 · 1321 阅读 · 0 评论 -
c语言字符串转整型函数实现
简介由于有些设备平台出于某些目的,不提供c函数库中的字符串转整型函数。为此,本文在这里提供一些"轮子"。atoi()函数实现int isDigit(char c) { return (c >= '0') && (c <= '9');}int myAtoi(char *str) { int result = 0; int neg_multiplier = 1; // Scrub leading whitespace whil原创 2022-05-23 14:44:04 · 386 阅读 · 0 评论 -
C语言有符号和无符号数
%x表示无符号十六进制%#x表示0x的十六进制%o 无符号以八进制表示的整数%lu表示输出无符号长整型整数%u表示输出无符号整型整数int main() { int a = -1; unsigned int b = 1; if(a > b) printf("a > b, a = %d, b = %u\n", a, b); else printf("a <= b, a = %d, b原创 2022-04-30 18:20:46 · 3368 阅读 · 0 评论 -
c语言数组与指针
数组与指针数组元素与普通变量一样,也有自己的地址。并且数组元素间地址是相邻的。(数组名在数值上为首元素的地址)int a[10]; int *p; p = &a[0];把100赋值给a[0], 有几种表示方法? a[0] = 100; *&a[0] = 100; *p = 100;p的内容是&a[0], &a[1] - &a[0] == 4 => &a[1] = &a[0] + 4 => &a[1] = p原创 2022-03-31 23:41:24 · 701 阅读 · 0 评论 -
C语言之柔性数组使用举例
#include<stdio.h>#include<malloc.h>typedef struct _SoftArray{ int len; int array[];}SoftArray;//打印输出斐波那契数列void printfln(SoftArray *p,int len){ int i; for(i=0;i<len;i++) //循环进行打印输出 { printf("%d\n原创 2022-03-27 19:01:26 · 1354 阅读 · 0 评论 -
C语言之i++和++i应用场景解读
对于普通独立的语句i++; 等效于i=i+1;++i; 等效于i=i+1;用于赋值语句i=1; y=i++; 等效于:i=1; y=i; i=i+1; 则执行完后 y=1; i=2;i=1; y=++i; 等效于:i=1; i=i+1; y=i; 则执行完后 y=2; i=2;3. 用在判断条件表达式i=0;while(i++) { printf("i=%d\n",i); if(i==3) break; }printf("i=%d\n",i);则执原创 2022-03-25 20:36:48 · 1363 阅读 · 0 评论 -
C语言之Void类型处理
( 1 ) void的含义 SIZEOF(VOID) = 0void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。void几乎只有“注释”和限制程序的作用例:void a; //语句编译时会出错void真正发挥的作用在于:(1) 对函数返回的限定;(2) 对函数参数的限定。void *与其它类型不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换:void *p1;原创 2022-03-24 22:21:15 · 1232 阅读 · 1 评论 -
C语言之指针
指针简介在运算时是取内容符,是取某个地址中间的值如p是取p指向的地址中的内容,加入定义p=&a,则*p是a的值。int *p=NULL;p 表示地址;*p 表示该地址p指向的内容;例 p=5会产生段错误,因为访问了一个不存在的地址。 即p=的的右值必须有地址int i = 0;int j=0;const int *p1 = &i; //指针的值不可修改, 指针指向的地址可以修改例 *p1=100; //错误 *p1=&j原创 2022-03-24 22:11:30 · 699 阅读 · 0 评论 -
堆栈溢出一般是由什么原因导致
背景全局变量存放在静态存储区,位置是固定的。 局部变量在栈空间,栈地址是不固定的。栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。全局存储区(静态转载 2022-03-19 18:26:06 · 14078 阅读 · 1 评论 -
C/C++ 代码风格和规范
简介文章重点将从注释、命名、方法、异常、单元测试等多个方面总结了一些代码整洁最佳实践。注释不要给不好的名字加注释,一个好的名字比好的注释更重要不要“拐杖注释”,好代码 > 坏代码 + 好注释在文件/类级别使用全局注释来解释所有部分如何工作一定要给常量加注释团队统一定义标记TODO 待处理的问题FIXME 已知有问题的代码HACK 不得不采用的粗糙的解决方案在注释中用精心挑选的输入输出例子进行说明注释应该声明代码的高层次意图,而非明显的细节不要在代码中加入代码的著作转载 2022-03-13 17:52:57 · 347 阅读 · 0 评论 -
c/c++内存分配注意点
直接定义一个数组,如a[SIZE];这个是分配的静态空间,在栈上(局部变量)或全局静态区(全局变量)上分配的,一般栈的内存是1M到2M,所以静态分配的空间不能太大,比如如果定义a[1024*1024];运行时就会报”段错误“,遇到要申请大的空间时,就需要动态申请。函数内申请的变量,数组,是在栈(stack)中申请的一段连续的空间。栈的默认大小为2M或1M,开的比较小;全局变量,全局数组,静态数组(static)则是开在全局区(静态区)(static)。大小为2G,所以能够开的很大;而malloc、ne原创 2022-03-02 10:07:16 · 540 阅读 · 0 评论 -
cJson ---json数据解析与数据打包成Json
1.json数据解析样例如下;{“cmd”: “start”, “nonce”: “11223344556”}//create json rootcJSON *pJsonRoot = NULL;unsigned char data[ ] = {"cmd": "start", "nonce": "11223344556"}; pJsonRoot= cJSON_Parse((const char*)data);if(pJsonRoot == NULL){ qDebug() <&原创 2022-02-18 10:56:07 · 752 阅读 · 0 评论 -
c++ enum的新特性之enum class enum struct
1. enum定义enum day{data1,data2,data3};enum class color{red=0,yellow,blue}2. 使用区别1.访问方式使用enum struct 和 enum class 只能通过域的方式访问其成员变量,不能直接访问内部变量。例如:color::red //okred //errorday::data1 //okdata1 //ok2.权限问题使用enum struct 和 enum class原创 2022-02-10 17:58:54 · 820 阅读 · 0 评论 -
c语言-文件数据块读写操作
1. 结构体数据块读写操作#include <stdio.h>#include <sys/file.h>#include <stdlib.h>typedef struct student{ char name[21]; int age; int score; char addr[51];}stu;#if 0//写入int main(){ stu ss[3] = { { "阿道夫", 9, 10,原创 2022-02-06 17:10:49 · 1095 阅读 · 0 评论 -
c 结构体和联合体使用的巧妙赋值
目的提高代码的聚合性。代码实现templatestruct XYZEval {union {struct { T x, y, z, e; };struct { T a, b, c; };T pos[4];};T data;bool operator==(XYZEval a){ return this->x == a.x && this->y == a.y && this->z == a.z;}void operator+=原创 2021-12-20 16:34:23 · 621 阅读 · 0 评论 -
c语言指针方面的一些知识(指针和变量的关系)
指针和变量的关系指针存放变量的地址; int a; int *p; p = &a; //指向一个地址指针变量 等价于指针指向的变量(存放一个已经分配空间的地址):例如:int a;int *p=&a; //a已经分配了空间对应类型的指针只能保存对应类型数据的地址:如果想让不同类型的指针互相赋值的时候,需要强制转换int a=0x1234,b=0x5678;char *p1,*p2;p1 = (char *)&a;p2 = (char *)&原创 2021-12-20 10:30:04 · 848 阅读 · 0 评论 -
关于C语言函数返回指针的问题
问题函数返回的指针后,取访问该指针指向的内存区域,但是这块内存区域已经在函数内被释放掉了,这时我们访问的这个内存区域是未初始化的,所以会出现访问非法内存地址的错误,这个错误很严重,直接会导致程序崩溃。解决返回函数计算结果的方法有三种:● 函数内分配内存空间, 该方法容易导致内存泄露和程序崩溃,不推荐使用。● 函数内分配静态内存空间, 在多次调用该方法的情况下需要注意变量内容被覆盖的问题。● 函数外分配内存空间,然后作为函数参数传递进函数内部,该方法虽然麻烦点,但是错误率比较低,推荐使用。...原创 2021-12-20 09:39:21 · 1133 阅读 · 0 评论 -
C语言内存管理
malloc使用的注意项通过malloc, 或局部数组分配的堆空间或堆栈空间, 首先用memset清0, 这是很多新手会忽视的, 这个很重要, 刚分配的空间的内容是不可预知的, 不清空很容易会影响程序的逻辑.在函数中不应该直接创建大的数组, 因为局部变量是分配在堆栈上的, 这样做, 不但效率不高, 而且会导致堆栈溢出, 堆栈空间是有限的.对于大的数组, 应该通过malloc分配堆空间来解决....原创 2021-12-19 22:58:07 · 423 阅读 · 0 评论 -
c语言 双重取反的高级用途(提升代码效率)
双重取反的妙用:!! (num)特点:如果num是 0以外的都处理成1,这里很轻松避开了if。优势:提高代码的执行效率;原创 2021-12-19 22:39:03 · 678 阅读 · 0 评论 -
c语言 使用宏实现对函数名的替换(代码更加灵活的方式)
C 宏对函数的高级用法/* file.h */extern void dataFun(void);extern int getDataFun(void);/* file.c *///不具体实现函数/* main.c*/#include “file.h”#define tData() void dataFun(void)#define getData() int getDataFun(void)tData(){printf(“Hello World\原创 2021-12-19 22:19:37 · 5230 阅读 · 0 评论 -
关于C语言枚举使用的一些注意点
以下该枚举的写法限定作用域,范围为(0-255),数值超过255,则会溢出。enum _mon : uint8_t{mon1 = 0,mon2 = 1,mon3 = 2,mon4 = 254,mon5 = 255,mon6 = 256,mon7 = 257,};int main(){enum _mon mon;mon = mon5;printf(“mon = %d\n”, mon); //255mon = mon6;printf(“mon= %d\n”, mon); /原创 2021-12-19 22:14:09 · 506 阅读 · 0 评论 -
C语言宏作用域的一些注意点
宏的作用域#includeusingnamespace std;voidt(void){#define a 10}int main(){cout << a<<endl;return0;}结论:如上代码编译,打印输出结果为10。由此可见#define的作用域是文件作用域,在定义之后的位置使用都有效。改变其作用域可在后面加#undef。如下#includeusingnamespace std;voidt(void){#define a 10#unde原创 2021-12-19 22:02:31 · 162 阅读 · 0 评论