
C/C++
文章平均质量分 68
学习C/C++,分享学习经验。
Risehuxyc
雄关漫道真如铁,而今迈步从头越。
展开
-
MCU启动后的代码读取位置技术讲解
在嵌入式系统开发中,MCU(微控制器)的启动过程是一个至关重要的环节。当MCU上电或复位后,它会从一个特定的地址开始读取并执行代码。这个地址通常是MCU内存空间中的最低地址,即0x00000000。本文将深入探讨MCU启动后去哪里读代码,并通过代码分析来进一步说明这一过程。原创 2025-02-19 09:18:24 · 432 阅读 · 0 评论 -
C++11的新特性有哪些?
C++11,也称为C++0x或C++11标准,是C++语言在2011年发布的一个重要版本。这个版本在C++98的基础上进行了大量改进,引入了约140个新特性,并修正了约600个语言缺陷。C++11的改进使得代码更加简洁、可读、可维护,并提高了开发效率。以下是对C++11部分新特性的详细讲解及代码示例。原创 2025-02-14 09:24:00 · 564 阅读 · 0 评论 -
libjpeg库——图像压缩与解压的核心技术
libjpeg库作为图像压缩与解压领域的核心技术之一,凭借其高效的压缩算法、灵活的配置选项和易于使用的API,成为了许多图像处理软件和库的基础。无论是在个人项目还是商业应用中,libjpeg库都是一个强大而实用的工具,能够帮助开发者实现高效的图像压缩和解压缩操作。libjpeg库,作为一个开源的图像压缩解压缩库,凭借其丰富的功能和灵活的接口,成为了图像处理领域的重要工具。图像采样则用于调整图像的分辨率和采样率,以降低图像的分辨率和文件大小,或提高图像的质量和细节。原创 2024-11-20 19:21:10 · 628 阅读 · 0 评论 -
微软Visual C++编译器团队架构师力挺C++26,称其是C++11以来最具影响力的版本
他指出,C++的下一个十年将由面向“反射”和“安全性”的改进主导,而C++26确实有望成为自C++11开启新纪元以来最具影响力的版本。他不仅是ISO C++标准委员会主席,还是标准C++基金会的主席,因此他的观点在C++社区中具有很高的权威性。C++26作为C++编程语言的最新版本,集成了现代化的语法和功能,为开发者提供了更高效、更安全、更便捷的编程体验。元编程拓展:C++26在元编程方面进行了拓展,提供了更多的模板元编程工具和技术,使得开发者能够更加灵活地进行代码的生成和优化。原创 2024-11-20 09:55:16 · 553 阅读 · 0 评论 -
从 const 到 mutable:C++ 中的优雅妥协与设计智慧
在C++编程中,const关键字被广泛应用于确保数据的不变性,它提供了一种强大的机制来防止意外修改,从而增强了代码的可靠性和可维护性。然而,在某些特定场景下,完全的不变性可能会限制设计的灵活性,这时mutable关键字便作为一种优雅的妥协和设计智慧被引入。原创 2024-11-18 20:34:51 · 370 阅读 · 0 评论 -
EasyX图形库技术分析与实践:简化C++图形编程
EasyX是一个专门为C++设计的图形库,它封装了Windows GDI(Graphics Device Interface)的复杂细节,提供了一套简洁易用的API。这些API涵盖了图形绘制、图像处理、文本输出、动画控制等多个方面,使得开发者能够专注于创意实现,而不必纠结于底层的图形编程细节。简洁易用:提供了直观的函数接口,降低了图形编程的学习门槛。功能丰富:支持基本的图形绘制、图像处理、动画控制等功能,满足多种应用场景。兼容性好:与Windows操作系统紧密集成,支持多种编译器和开发环境。性能高效。原创 2024-11-18 20:27:44 · 776 阅读 · 0 评论 -
C++中的“强制类型转换”与“隐式类型转换”的区别
隐式类型转换是编译器自动进行的类型转换,通常用于确保操作能够顺利进行,并尽可能避免数据丢失或精度下降。强制类型转换是程序员明确指定的类型转换方式,它允许在不考虑数据安全性的情况下进行类型转换。强制类型转换使用C风格的转换运算符或C++提供的命名转换运算符。在使用强制类型转换时,特别是时,程序员需要格外小心,因为它不会根据已有的转换规则对数据进行调整,可能导致未定义行为。原创 2024-11-18 20:21:43 · 468 阅读 · 0 评论 -
双重调度(Double Dispatch)在C++中的理解与实现
在软件开发中,调度机制是函数调用过程的核心。C++作为一种静态类型语言,支持静态调度和动态调度,这两种调度方式均属于单重调度。然而,在某些复杂场景下,单重调度可能无法满足需求,这时就需要引入双重调度。本文将详细解析双重调度的概念,并通过代码示例展示其在C++中的实现。双重调度(Double Dispatch)是一种设计模式,它允许在运行时根据两个对象的类型来决定调用哪个函数。与单重调度不同,双重调度需要考虑两个对象的类型信息,从而能够支持更复杂的多态行为。在C++中,双重调度通常通过访问者模式(Visito原创 2024-10-23 20:18:57 · 431 阅读 · 0 评论 -
《ARM Cortex-R 学习指南》-【第六章】-浮点数
所有的计算机程序都处理数字。然而,对于不熟悉其详细实现的程序员来说,浮点数有时可能显得反直觉。在查看ARM处理器上的浮点实现之前,包含了对浮点基础知识的简短概述。具有浮点数经验的程序员可能想要跳过以下部分。转载 2024-09-28 16:06:21 · 393 阅读 · 0 评论 -
float存储原理
接下来,我们需要将有效数字位转换为十进制小数形式。由于有效数字位的长度为23位,我们需要将其转换为一个介于1和2之间的小数。总的来说,float类型的存储原理是一个复杂但极其重要的计算机科学概念,它支撑着现代计算机系统中对非整数的高效表达和计算。现在,我们需要计算实际的有效数字值。由于指数位的值是64,所以我们需要减去偏移量(bias),对于单精度浮点数,偏移量为。这就是有效数字位在浮点数存储中的作用,它帮助我们精确地表示非整数数值。因此,实际的指数值为。原创 2024-09-14 21:59:36 · 609 阅读 · 0 评论 -
海伦公式求三角形面积
相传这个公式最早是由古希腊数学家阿基米德得出的,而因为这个公式最早出现在海伦的著作《测地术》中,所以被称为海伦公式。然而,根据Morris Kline在1908年出版的着作考证,这条公式其实是阿基米德所发现,以托希伦二世的名发表。中国秦九韶也得出了类似的公式,称三斜求积术。海伦公式,又译作希伦公式、海龙公式、希罗公式、海伦-秦九韶公式,是一种用于计算三角形面积的公式。这个公式的特点是形式漂亮,便于记忆。原创 2024-02-15 23:47:44 · 1344 阅读 · 0 评论 -
单链表实现约瑟夫环
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。在本篇博客中,我将是以一个单链表围成一个环,然后从第一个结点开始报数,当数到3的时候的那个结点就被抛出,然后从下一个开始又重新从1开始继续报数,从而留下最后一个结点,就是约瑟夫点(我自己瞎猜的);大家对约瑟夫环是比较陌生的,但是对于大多数人来说,丢手绢却一点都不陌生,其实约瑟夫环和丢手绢差不多。原创 2024-02-07 23:37:54 · 413 阅读 · 0 评论 -
如何有效预防内存泄漏?
最近部门不同产品接连出现内存泄漏导致的网上问题,具体表现为单板在现网运行数月以后,因为内存耗尽而导致单板复位现象。一方面,内存泄漏问题属于低级错误,此类问题遗漏到现网,影响很坏;另一方面,由于内存泄漏问题很可能导致单板运行固定时间以后就复位,只能通过批量升级才能解决,实际影响也很恶劣。同时,接连出现此类问题,尤其是其中一例问题还是我们老员工修改引入,说明我们不少员工对内存泄漏问题认识还是不够深刻的。本文通过介绍内存泄漏问题原理及检视方法,希望后续能够从编码检视环节就杜绝此类问题发生。原创 2023-12-05 22:05:42 · 482 阅读 · 0 评论 -
基础堆溢出原理与DWORD SHOOT实现
1.快表中的空闲块被设置为占用态,故不会发生堆块合并操作。2.快表只有精确匹配时才会分配,故不存在"搜索次优解"和"找零钱"现象。3.快表是单向链表,操作比双链表简单,插入删除都少用很多指令。4.综上所述,快表很快,故再分配和释放时,总是优先使用快表,失败时才用空表。5.快表只有四项,很容易就被填满,因此空表也是很频繁被使用的。综上所述,Windows的堆管理策略兼顾了内存合理使用、分配效率等多方面因素。二堆调试。原创 2023-12-04 22:28:12 · 660 阅读 · 0 评论 -
使用RTOS时需要注意的几点内容
对许多嵌入式项目来说,系统设计师都倾向于选择实时操作系统(RTOS)。但RTOS总是必要的吗?答案是取决于具体的应用,因此了解我们要达到什么目标是决定RTOS是必要的还是花瓶的关键。一般来说,在采用非实时操作系统(non-RTOS)的任何场合,也都可采用RTOS。但是,要找到一款具有完全相同应用编程接口(API)的匹配RTOS就相当困难了。因此,许多传统的操作系统(OS)在其内嵌入了一个RTOS。例如,Lynux-Works LynxOS和Bluecat Linux共享一个Linux API。原创 2023-12-03 22:24:40 · 169 阅读 · 0 评论 -
函数声明后的“ - >”是什么?
在这个例子中,add 函数声明使用了尾返回类型,通过 -> int 指定了函数的返回类型为 int。这种语法的优势之一是可以在函数的返回类型中使用函数参数,使得返回类型更灵活。这种语法的优势之一是可以在函数的返回类型中使用函数参数,使得返回类型更灵活。需要注意的是,尾返回类型通常在函数定义的时候使用,而不是在函数声明的时候。但是有时可能需要使用模板,当函数的返回类型可能随参数而变化时。关键字而不是您通常期望的实际返回类型时才能使用它。,以及新的函数声明语法,让你解决这个问题。表示以下是该函数的返回类型。原创 2023-12-01 22:52:05 · 212 阅读 · 0 评论 -
嵌入式 C 语言,内聚和耦合的定义
有些函数数在调用时,利用形式参数传地址的方式,在函数体内通过指针可以修改其指向的作用域以外的存储单元,这构成了更强的耦合,称为特征耦合,在这里,使函数之间产生联系的是地址这样的特征标识。现在将“找出完全平方数并输出”的功能仍放在main函数中(独立成为单独的函数也可以,但不必要了),而“每5个数据后换行”的功能,设计一个名称为format的函数,它每调用一次就输出一个空格作为两个完全平方数间的分隔,而每调用到第5次时,输出的是一个换行。对于这样的函数,如果不致于产生高耦合的话,可以分开两个函数实现。原创 2023-11-27 20:08:18 · 281 阅读 · 0 评论 -
OpenCV简介及安装
比较遗憾的是默认的pip源中没有opencv这个库,不能直接pip install opencv,不过这时候我们可以下载其whl文件,下载地址:Python Extension Packages for Windows。下载好后,通过命令行到whl文件目录下,pip install [下载的whl完整文件名]。一次OpenCV初体验,个人觉得可能是历史遗留问题(以前的OpenCV是完全由C实现的),OpenCV的OOP特性并不强,跟Python的另一个图像库pillow相比用起来感觉有点怪。原创 2023-11-25 16:29:37 · 2371 阅读 · 0 评论 -
一个简单的C++ DNS客户端代码
注意:这个代码只适用于IPv4地址。如果你需要处理IPv6地址,你需要修改代码,使用。此外,这个代码没有处理网络错误,例如DNS服务器不可达或超时。原创 2023-09-04 18:47:11 · 225 阅读 · 0 评论 -
ASCII码对照表
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字节就可以存储,它等同于国际标准 ISO/IEC 646。ASCII 编码于 1967 年第一次发布,最后一次更新是在 1986 年,迄今为止共收录了 128 个字符,包含了基本的拉丁字母(英文字母)、阿拉伯数字(也就是 1234567890)、标点符号(,.!等)、特殊符号(@#$%^&等)以及一些具有控制原创 2022-06-14 06:08:38 · 490 阅读 · 0 评论 -
PHP MySQL报错Commands out of sync
Commands out of sync; you can’t run this command nowMysql文档中说明错误:Commands out of syncIf you get “Commands out of sync; you can’t run this command now” in your client code, you are calling client functions in the wrong order.This can happen, for examp转载 2022-01-14 20:23:19 · 358 阅读 · 0 评论 -
C/C++判断大端模式还是小端模式
判断大端模式还是小端模式:#include <stdio.h> int main(int argc, charchar *argv[]) { unsigned int a = 0x12345678; unsigned char *p = (unsigned char *)&a; // 取低地址上的数据 if(0x12 == *p){ printf("Big-Endian\n"); }else if(0x78 =原创 2020-09-23 21:06:41 · 394 阅读 · 0 评论 -
WINDOWS下内存泄漏检测工具VLD(Visual Leak Detector)的使用
VLD安装:https://kinddragon.github.io/vld/点击下载安装器安装完成后,会自动将其include目录添加到VS的附加安装目录,将其静态库目录(lib目录)添加到VS的附加库目录,无需手动添加include目录和lib目录VLD使用:通常在main函数所在的CPP文件中include<vld.h>即可运行程序,退出后产生检测报告注意事项:1 如果有include"stdafx.h",则include <vld.h>转载 2020-07-09 22:43:44 · 1074 阅读 · 2 评论 -
EasyX中更改控制台窗口信息
#include <iostream>#include <graphics.h>#include <string>#include "resource.h"using namespace std;int main(){ initgraph(800, 600); SetWindowText(GetHWnd(), L"沙漠骆驼");//SetConsleTitle /*LoadIcon(hIn,)*/ IMAGE bk; loadimage(&.原创 2020-07-05 20:31:50 · 2327 阅读 · 0 评论 -
EasyX中使用背景音乐
#include <graphics.h>#include <conio.h>#include <mmsyscom.h>#pragma comment(lib,"winmm.lib")int main(){ initgraph(600, 600); IMAGE bk; loadimage(&bk, L"./res/美国情报机构.jpg", 600, 600); putimage(0, 0, &bk); mciSendString.原创 2020-07-05 20:29:04 · 8215 阅读 · 3 评论 -
EasyX使用鼠标和背景图片
#include <graphics.h>#include <conio.h>#include <mmsystem.h>#pragma comment(lib,"winmm.lib")int main(){ initgraph(800,600); IMAGE bk; loadimage(&bk, "23.jpg", 800, 600); putimage(0, 0, &bk); mciSendString("open 童话镇..原创 2020-07-05 20:25:20 · 2138 阅读 · 0 评论 -
EasyX库入门
EasyX 是针对 C/C++ 的图形库,可以帮助使用C/C++语言的程序员快速上手图形和游戏编程,比如,可以用 VC + EasyX 很快的用几何图形画一个房子,或者一辆移动的小车,可以编写俄罗斯方块、贪吃蛇、黑白棋等小游戏,可以练习图形学的各种算法,等等。使用上,基本和Turbo C没太大区别。启动Visual C++,创建一个控制台项目(Win32 Console Application),然后引用 graphics.h 头文件就可以了。看一个画圆的例子:#include <grap.原创 2020-07-05 20:22:45 · 1639 阅读 · 0 评论 -
C语言数据结构---顺序表
顺序表是连续的内存数据结构,查找比较快,缺点是扩展性比较差。/********************************************************************************Complier:VS2017*Project:SequenceList 顺序表*Author:Rise*1、用数组(固定大小) 实现 顺序表 要求有增删改查操作 (使用函数)**********************************************原创 2020-07-05 20:07:46 · 247 阅读 · 1 评论 -
opencv腐蚀图像
// opencv10_dilate.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <opencv2/opencv.hpp>#include <opencv2/imgproc.hpp>using namespace cv;using namespace std;//debug下在lib文件的名称后加d,release下不加d。int main(){ Mat.原创 2020-07-05 20:06:54 · 533 阅读 · 0 评论 -
opencv用拉普拉斯算子做锐化
// opencv9_sharpening.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <opencv2/highgui.hpp>#include <opencv2/imgproc.hpp>using namespace cv;using namespace std;//debug下在lib文件的名称后加d,release下不加d。void salt(Mat.原创 2020-07-04 23:07:21 · 1301 阅读 · 0 评论 -
opencv模拟椒盐噪声
// opencv8_makesalt.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <opencv2/opencv.hpp>#include <opencv2/highgui.hpp>#include <opencv2/imgproc.hpp>using namespace cv;using namespace std;//debug下在lib文件.原创 2020-07-04 23:02:01 · 387 阅读 · 0 评论 -
opencv转换灰度图像并保存
// opencv7_graying.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <opencv2/opencv.hpp>#include <opencv2/highgui.hpp>#include <opencv2/imgproc.hpp>using namespace cv;using namespace std;//debug下在lib文件的.原创 2020-07-04 22:58:09 · 3921 阅读 · 2 评论 -
opencv从摄像头获取图片帧并做边缘检测
// opencv6_videocapturefromcamera.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>//#include <opencv2/opencv.hpp>#include <opencv2/highgui.hpp>#include <opencv2/videoio.hpp>#include <opencv2/imgproc.hpp>usin.原创 2020-07-04 22:53:04 · 628 阅读 · 0 评论 -
opencv读取视频文件的图片帧
#include <iostream>//#include <opencv2/opencv.hpp>#include <opencv2/highgui.hpp>#include <opencv2/videoio.hpp>#include <opencv2/imgproc.hpp>using namespace cv;using namespace std;//debug下在lib文件的名称后加d,release下不加d。i.原创 2020-07-04 22:49:37 · 684 阅读 · 0 评论 -
opencv---------边沿检测Canny算子
// opencv4_canny.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <opencv2/opencv.hpp>#include <opencv2/imgproc.hpp>using namespace cv;using namespace std;//debug下在lib文件的名称后加d,release下不加d。int main(){ Mat i.原创 2020-07-04 22:41:44 · 177 阅读 · 0 评论 -
opencv第三个项目---均值滤波
// opencv3_blur.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <opencv2/opencv.hpp>using namespace cv;using namespace std;//debug下在lib文件的名称后加d,release下不加d。int main(){ Mat img = imread("../res/test.jpg"); if (.原创 2020-07-04 22:36:05 · 154 阅读 · 0 评论 -
opencv第二个项目---腐蚀
// opencv2_corrode.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <opencv2/opencv.hpp>#include <opencv2/imgproc.hpp>using namespace cv;using namespace std;//debug下在lib文件的名称后加d,release下不加d。int main(){ Mat.原创 2020-07-04 22:25:44 · 167 阅读 · 0 评论 -
opencv入门第一个项目---显示图片
// opencv1_showimage.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//在Debug模式下使用imread函数读取图片时失败,而在Release模式下同样的代码则可以读取到图片。//Debug模式下的配置中,库文件选择的是带d的lib文件。针对这种情况,右击Project,//选择“配置属性-->C/C++-->代码生成”,将“运行库”修改为“多线程调试(/MTd)”,//再重建整个工程,问题得到解决。#include <iost.原创 2020-07-04 22:21:31 · 283 阅读 · 0 评论 -
opencv配置
摘要:vs2019新鲜出炉,配置opencv又有哪些不一样呢,这个教程将会一步一步的教你如何配置opencv和跑动opencv一个简单的项目。环境:系统:win10系统截至20190523版本opencv版本:3.4.1版本IDE:宇宙最强IDEA最新版本2019社区版教程:1、下载opencv安装包,由于4.0.1版本会出现不同的错误,我们将使用3.4.1版本。官网下载链接:https://opencv.org/releases.html#。2、下载完op...转载 2020-07-04 22:13:49 · 1510 阅读 · 0 评论 -
常用的基本函数的实现
#pragma once#include<stdio.h>#include<stdlib.h>#include<stdarg.h>#include<ctime>#include<cstring>#include<cmath>#include<vector>#include<iostream>#include<iomanip>using namespace std;//std:.原创 2020-07-02 23:05:04 · 209 阅读 · 0 评论