![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/c++及相关
对对影成三人
这个作者很懒,什么都没留下…
展开
-
用C语言写一个状态机
最近在做一个项目,中间需要一个串口数据传输并且检测有效序列的问题要解决。(是在单片机上做的 msp430f149) 由于以前做过一段时间的FPGA设计,在fpga中,这个检测就是一个序列状态检测机就能搞定。而且速度非常的快,用的是verilog语言,一种硬件描述语言。它和C语言的的工作模型完全不一样的。其实说了这些。我就是想把这种状态机知识迁移到我的单片机上,然后解决我的问题 。原创 2014-02-25 12:50:50 · 4382 阅读 · 0 评论 -
数组溢界地址的正确使用: 即 int a[6] 中的 a[-1] 和 a[6] 正确使用
数组溢界地址的正确使用: 即 int a[6] 中的 a[-1] 和 a[6] 正确使用原创 2014-06-24 10:04:25 · 1538 阅读 · 1 评论 -
stl容器区别: vector list deque set map及底层实现
在STL中基本容器有: vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问 set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少map:映射,相当于字典 ,把一个值映射成另一个值,如果想创建字典的话使用它好了底层采用的是树型结构,多数使用平衡二叉树实现 ,查找某一值是常数时间,遍历转载 2014-06-23 16:22:26 · 807 阅读 · 0 评论 -
glibc 内存池管理 ptmalloc(转)
ptmallocphenix* 2006-06-07目录 1 前言 2 x86平台Linux程序的内存分布 3 Allocator 4 chuck的组织 4.1 chuck 4.2 chunk中的空间复用 5 空闲 chunk 容器 5.1 Bins转载 2014-06-06 08:43:17 · 1773 阅读 · 0 评论 -
使用函数指针,完成一个sort()函数,能对任何类型的数组元素进行排序: 回调函数 以及 memcpy ()原型实现
进来复习了一下C语言指针,一直没有写过太多关于函数指针的代码,而且对回调函数的理解一直都是在理论上,基本上没有太写过关于它的代码,进来得空,写了一个小程序加深下自己对回调函数和函数指针的理解。问题描述: 编写一个sort()函数,使它能够对任何类型的数组元素进行排序。下面是我写的代码:/* 使用函数指针的回调函数技巧,设计一个能排序int 和char 数组的sort()函原创 2014-05-30 14:27:38 · 5614 阅读 · 0 评论 -
使用 & ^ << 等 位符实现加法运算
学习过C语言的同学都知道,再写代码的时候,位操作运算总比算数运算操作快, 本文就是用C语言提供的位运算实现两个数的加法。本文使用的代码都经过调试正常并且能够运行,调试环境centos gcc 一下是实现代码,以及测试结果:#include#includeint main(int argc, char **argv){ int add_a,add_b;原创 2014-06-27 14:44:15 · 843 阅读 · 0 评论 -
二维数组环形打印,亲自调试
/*先把数据按照打印格式打印到二维数组中,然后输出二维数组即可 *时间复杂度 O(N*M) *空间复杂度O(N*M)*/#include#include#includeint input(void);void contral(int **arry,int col,int row);void set_value(int**a,int col,int ro原创 2014-09-04 08:18:29 · 2729 阅读 · 0 评论 -
寻找数组N中最大(最小的)M个数(亲自调试可运行)
当N很小十可以使用方法2,当N很大时可以使用方法1,从硬盘逐次读入解决;/*方法 1 适合大量数据 *寻找长为N的数组的前M大的元素并输出。 *用堆的性质,使用数组N建立一个M大的最大堆,然后输出堆内容即可 *时间复杂度分析: 建堆时间O(M) *遍历数字,并在堆中比较时间O((N-M)logM) *总时间复杂度O(M)+ O((N-M)logM) *原创 2014-09-06 09:59:30 · 1806 阅读 · 0 评论 -
字符串分割到二维字符数组中:
/* *字符串分割,把一个长的字符串(可能有空格),分割到一个二维字符数组中。 *并且输出 * *时间复杂度O(N) *注意在操作二维字符串数组时:使用“数组指针”操作能方便 int(*p)[LEN]; * */#include#include#include#include#define NDEBUG#include#define STR_SI原创 2014-09-06 14:37:46 · 1617 阅读 · 0 评论 -
寻找长为N的数组的前M大的元素并输出
寻找长为N的数组的前M大的元素并输出:使用堆原创 2014-09-03 16:02:05 · 988 阅读 · 0 评论 -
虚函数 inline函数
一、首先回顾下什么是虚函数及其作用,以便更好理解什么函数不能声明或定义为虚函数:1. 定义:虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式: virtual 函数返回值类型 虚函数名(形参表) { 函数体 }2. 作用:虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合转载 2014-05-20 15:40:45 · 1270 阅读 · 0 评论 -
读stdlib.h 库qsort源码 ,对上篇文章(回调函数)排序进行修改:
今天无意间看见stdlib.h库 文件中的qsort() 函数的源码,颇有感触,并且觉得自己在上篇博客写的代码虽然还可以,但在看了源码后,觉得自己还是有些思想上的问题。故 写这篇文章给自己纠正。上篇中的sort()函数原型: void sort(const void *,const int number,unsigned width,int(*compare)(void原创 2014-06-03 17:05:49 · 1733 阅读 · 0 评论 -
C++ static、const和static const 以及它们的初始化
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。 在C++中,sta转载 2014-04-07 09:37:26 · 829 阅读 · 1 评论 -
C语言学习笔记(1)
extern的用法:(声明变量 / 函数) extern可以用来修饰变量,也可以用来修饰函数(不过放到函数前面基本没有意义) 例如: int t; // 定义一个变量,并在内存分配四字节(32位系统) extern int t; //声明一个变量,但是没有分配内存C语言中对于变量的声明与定于的一般规则: 1:头文件中,对于原创 2014-02-25 15:10:10 · 897 阅读 · 0 评论 -
C语言学习笔记(3)assert的使用
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#inclu转载 2014-02-26 14:16:53 · 717 阅读 · 0 评论 -
C语言学习笔记(2) 浅析static变量
像大家知道的一样,static是静态变量,别static修饰的变量都会被编译器放到(.data)数据段。当时有两种情况大家需要分清楚:1:static修饰一个全局变量。 全局变量本来就是放在(.data)数据段,它存在的意义就在于可以被多个函数访问,而这些函数村早与不同的C代码中。但正是因为这个,他给我们会带来一些麻烦。由于C语言只有一个全局空间,于是很容易发生命名冲突。试想一个项目原创 2014-02-26 14:11:19 · 695 阅读 · 0 评论 -
C语言学习笔记(4)类型转化,复合类型
c语言里的简单类型只有两类,整数型 和浮点型:整数型: char 1 short 2 int 4 long 4浮点型 :float 4 double原创 2014-02-27 13:17:42 · 1236 阅读 · 0 评论 -
C90为C语言增加了void : void 表示什么?
关键字 void是在C90新增加的。它的用法涉及几个方面:在函数原型中,函数原型为编译器提供依据检查函数的参数是否合乎要求。但由于大量的k&R c 中,是这样声明函数的: double fun ();C90中,为了能够确切的检测函数参数,明确指出应该使用 double fun(void);但又考虑到对以前版本的兼容,所以在,C90的版本中,遇到double fun ();会自动避原创 2014-02-28 15:36:58 · 1220 阅读 · 0 评论 -
typedef 和 #define 的区别
一直想动手写关于typedef 和# define的区别,偶然的机会发现这篇博文,觉得写得很好。把自己想要表达的都说的很清楚所以就转载了。感谢dfcao 来自博客园的兄弟。typedef 和#define 都常用来定义一个标识符及关键字的别名,但他们之间有关键的区别。typedef 是语言编译过程的一部分;#define是宏定义语句,它本身并不在编译过程中进转载 2014-03-03 14:18:16 · 774 阅读 · 0 评论 -
C++中:类数据成员的内存布局
首先我们从一个有趣的问题引入: class A { };当我们运行 :cout为啥会是这样呢?其实在《深度探索C++对象模型》一本书中,有详细的解读,我在这只想说说自己的理解:首先class A 是一个类型,是用来实例化对象的,所以它就必须有具体的空间,使系统能按照它的格式分配内存。如果 A a; 当然sizeof(a)的结果也是1。这个是因为它是以一个对象存在的,我们必原创 2014-03-06 18:20:16 · 858 阅读 · 0 评论 -
分析 C++中的强制类型转化
C++中有4种强制转换:const_cast,static_cast, dynamic_cast, reinterpret_cast,以下将分别介绍: 1. const_cast:形式const_cast(expression),用来修改类型的const或volatile属性,除了const或volatile修饰以外,type与expression类型一样;它主要用转载 2014-03-06 16:07:54 · 628 阅读 · 0 评论 -
C语言 struct大小、首地址与内存对齐
被问到如下问题:给定一个结构体中某个变量地址,可否得到结构体变量的地址?答案是可以,但是对不同的场合有不同的结果;这与微处理器平台、编译器的处理不可分割。首先,对于处理器,大尾端、小尾端的因素必须考虑;其次:一、 ANSI C标准中并没有规定,相邻声明的变量在内存中一定要相邻。为了程序的高效性,内存对齐问题由编译器自行灵活处理,这样导致相邻的变量之间转载 2014-03-06 16:49:56 · 2344 阅读 · 0 评论 -
深究指针与引用的差别
由指针定义知,是指向内存中某个存储体对象的变量。它可以指向简单变量, 数组,结构体等,甚至函数 (函数指针)。个人在此有一个疑问,既然指针是指向存储体的变量,而函数没有存储性质,那函数指针如何实现的?我是从这感觉函数没有存储性质:class A{ int i; int fun(int );};大家都知道这个类内存中sizeof(A)= 4; 即它的内存完全是分配给(int)变量的。所以它的成员函数(int fun(int))没有存储性质。所以就不明白函数指针的实现?原创 2014-03-19 19:41:51 · 868 阅读 · 0 评论 -
删除数组中重复元素 (使用stl::set)
删除数组中重复元素 (使用stl::set)原创 2014-09-03 16:05:12 · 2934 阅读 · 0 评论