C/C++
讲解有关C语言的文章,方便集中管理
南波儿万
一个程序猿
展开
-
linux 共享内存动态扩展的问题(链表数据保存到共享内存)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、问题描述二、Linux共享内存深入了解1.了解问题的本质才能找到解决问题的最佳方案2.封装一个mallocshm函数实现连表的进程间共享总结前言是的美国大选都到了第三天了,然而吃了几天瓜也没有个结果,导致我吃瓜的热情严重不足。于是我不得不大起精神来思考一下我的问题该如何解决。对了,都二十世纪二十年代了,互联网云计算都发展十多年了。本来一个微信公众号就能解决的事情,美国作为一个世界上唯一的超级大国,选个举居然还要用邮寄原创 2020-11-07 22:31:43 · 1657 阅读 · 1 评论 -
void* C实现多态的载体
考虑这样的问题,有一台由多种功能板块组成的机器,并且这些板块是可以自由的插拔的,而且每种板块管理的参数也是不同的。我们用C++这类面向对象的语言可以很容易的实现这样的功能,因为面向对象的语言支持多态。于是有了这样的问题:C语言如何实现多态?面对上面的实际问题,C++是这样实现的:class Board{public: Board(); virtual ~Board(); virtual Board* getBoard() = 0; virtual void setBoard(Board*原创 2020-05-13 09:45:23 · 412 阅读 · 0 评论 -
Linux pty虚拟串口write阻塞
这两天遇到一个问题,程序中的串口运行时间长了就读不到数据了,最后发现是因为我虚拟的串口在写数据的时候发生了阻塞从而导致读串口的线程一直阻塞在写虚拟串口的操作处。我列出我程序的片段:void vir_serial_init(char *filename){ vir_serial_fd = -1; sfd = -1; int ret = -1; char spty_name...原创 2020-03-24 16:13:27 · 685 阅读 · 0 评论 -
libjpeg和ligpng的安装和使用
最近在做点阵屏的显示,程序需要从图片文件中读取像素数据,于是研究了一下libjpeg库的使用。下载http://www.ijg.org/https://sourceforge.net/projects/libpng/files/libpng16/1.6.34/交叉编译1.解压jpegsrc.v9b.tar.gztar -xvf jpegsrc.v9b.tar.gz2. cd jpeg...原创 2020-03-19 16:27:46 · 1286 阅读 · 0 评论 -
C++循环体内的对象是否会调用析构函数?
今天我对我的一段程序代码产生了怀疑,不能确定在循环体内创建的对象在一次循环结束时是否会调用析构函数,于是我亲手测试了一下:#include <cstdlib>#include <iostream>using namespace std;class A{public: A(){ cout << "A()" <<en...原创 2020-03-06 16:21:07 · 894 阅读 · 0 评论 -
C++冒泡排序
class BubbleSort {public: BubbleSort(){} virtual ~BubbleSort(){} static void sortn_0(int *src, int size){ int t; for(int i = 0; i < size-1; i++){ for(int j...原创 2020-02-24 15:29:33 · 210 阅读 · 0 评论 -
C++基类指针指向的派生类对象析构时出现的内存泄漏问题
前几天有人问了一个这样的问题class A{public: A(){ a = new int; } ~A(){ delete a; }private: int *a;}class B : public A{public B(){ b = new int; } ~B(){ delete b; }private: int *b;}int m...原创 2020-02-24 13:31:19 · 837 阅读 · 0 评论 -
C++重载运算符[][]
我们都知道C++可以重载运算符,但是当我实现一个矩阵类时我忽然产生了一个奇怪的想法,那就是"[][]"这个运算符如何重载?最后发现只需要重载“[]”就可以实现了,代码如下:template <class T>class BMat{public: BMat(int w_, int h_){ with = w_; hight = h_; mat = new T*[wi...原创 2020-02-18 10:04:04 · 1253 阅读 · 0 评论 -
C++动态分配二维数组
在做矩阵处理时经常会出现二维数组的分配问题,今天实现了一个类可以实现矩阵的动态分配即二维数组的动态分配class Mat {public: Mat(int w, int h){ with = w; hight = h; //为二维数组分配空间 mat = new int*[hight]; for (int i = 0; i < hight; i++) mat[...原创 2020-02-17 13:36:18 · 959 阅读 · 0 评论 -
C++实现Linux下串口的读写
作为一个嵌入式程序员,串口的读写已经见怪不怪了。嵌入式Linux的串口也应用广泛。百度一搜也有许多讲解这方面的知识,今天我只展示我Linux下用C++实现的一个串口类可以实现类似于单片机中断的机制。使用起来很方便我只展示接口:/* * File: BSerialPort.h */#ifndef BSERIALPORT_H#define BSERIALPORT_Hclass ...原创 2019-12-29 15:05:59 · 3157 阅读 · 0 评论 -
C语言指针(八)--队列
队列原创 2019-12-21 16:26:44 · 1474 阅读 · 0 评论 -
C语言指针(七)--栈
数据结构利用C语言实现可以很好的练习指针的使用。我们日常编程工作离不开对数据结构知识的应用。二者结合学习可以夯实我们语言基础同时加深对数据结构的理解。栈,计算机专业毕业的读者想必在数据结构课程中都有过了解。栈作为一种先进后出的数据结构应用广泛。比如,我们记录访问路径,用户按返回按键可以原路返回。这样的功能就要借助栈这种数据结构来实现功能。...原创 2019-12-19 13:14:05 · 588 阅读 · 0 评论 -
C语言指针(五)--函数指针
栈是一种先进后出的数据结构,原创 2019-12-16 20:37:09 · 696 阅读 · 0 评论 -
从计算机的角度理解C语言指针(一)
从第一次接触C语言开始我看过很多关于C语言的书籍,但是很少有相关的书籍从计算机的角度去解读这门高级语言。我从2015年开始接触嵌入式系统,从事嵌入式系统软件开发。在使用这门语言的过程中逐渐的理解CPU、内存和硬盘(嵌入式系统往往是flash或者SD卡)以及C语言的关系。我接下来一系列文章都会从计算机的角度去理解和学习C语言。我们学习C语言大多数时从main函数开始学起,在开发软件中输入类似于下面...原创 2019-12-10 17:39:13 · 355 阅读 · 0 评论 -
C语言指针(六)-- 双向链表和循环链表
在“C语言指针(四)–链表”这篇文章中我讲解了单向链表,但是在链表的家族中我们还经常见到双向链表和双(单)向循环链表。我们可以从他们的名字想象出它们在内存中的样子。我们根据上图定义双链表节点的数据结构实现插入、删除和遍历等操作:typedef struct node{ int data; struct node *prev; struct node *next;}Node;...原创 2019-12-18 09:04:46 · 322 阅读 · 0 评论 -
C语言指针应用(四)-- 链表
对于一个职业的C语言程序员,熟练的使用链表是基础。链表在编程实践中应用广泛,也是实现各种数据结构的基础。所以这篇博文以后的几篇博文都会讲述链表以及应用链表实现各种数据结构。如果读者能够认真阅读和实践我的文章一定会对链表和C语言指针有新的认识。...原创 2019-12-13 17:57:37 · 343 阅读 · 0 评论 -
C语言指针(三)--union-C语言的弃儿
union作为C语言的一个关键字跟关键字volatile一样很少出现在程序员 的视野之中,当然相比于volatile,union的处境相对还好一点。但是我总觉得他是C语言的弃儿。...原创 2019-12-12 13:21:48 · 1337 阅读 · 6 评论 -
从计算机角度理解C语言指针(二)
这一篇博文我们给内存分一下区。有同学会说,听说过给硬盘分区的没听过给内存分区的。其实,学习过Linux内核的同学肯定看到过有关页表的内容。这些讲起来太复杂还有什么虚拟内存等等内容更是无法理解,但是这些都不影响我们给内存分区。话说内存也不是什么神秘的东西,我感觉它就跟我们小学用的方格本差不多。唯一的区别就是我们这个方格本每一行都有32个格子,每个格子里只能放0或1。于是我们的程序就将这个叫内存的...原创 2019-12-10 20:40:05 · 246 阅读 · 1 评论