c/c++
Y_Hanxiao
这个作者很懒,什么都没留下…
展开
-
单例模式 c++
单例模式(写LOG,读写配置文件等) c++/* good old meyers' singleton */template<class T>class CSingleton{public: static T& Instance() { static T theSingleton; return theSingleton; } /* more (non...原创 2020-04-27 16:40:38 · 243 阅读 · 0 评论 -
C++ 自由存储区是否等价于堆?
“free store” VS “heap”当我问你C++的内存布局时,你大概会回答:“在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区”。如果我接着问你自由存储区与堆有什么区别,你或许这样回答:“malloc在堆上分配的内存块,使用free释放内存,而new所申请的内存则是在自由存储区上,使用delete来释放。”这样听起来似乎也没错,但如果我接着问:自由存储...转载 2018-06-14 11:53:34 · 278 阅读 · 0 评论 -
c++5个内存区域
C++中,内存分为5个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。栈:是由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存放局部变量、函数参数等。堆:是由malloc等分配的内存块,用free来释放。自由存储区:是由new分配的内存块,由程序员释放(编译器不管),一般一个new与一个delete对应,一个new[]与一个delete[]对应。如果程序员没有释放掉,资源将由操作...原创 2018-06-14 12:12:12 · 794 阅读 · 0 评论 -
“#ifdef __cplusplus extern "C" { #endif”的定义
平时我们在linux c平台开发的时候,引用了一些Cpp或者C的代码库,发现一些头文件有如下代码条件编译。 #ifdef __cplusplusextern "C" {#endif// 代码#ifdef __cplusplus}#endif这个是什么意思呢?一开始看到这个也很茫然。上网查找了一些资料。主要作用:为了在C++代码中调用用C写成的库文件,...转载 2019-01-04 10:07:22 · 457 阅读 · 0 评论 -
length()、size()、sizeof()三者的区别
一、length()函数c++中,length()只是用来获取字符串的长度。例如:string str = “asdfghjkl”则,str.length() = 9。二、size()函数c++中,在获取字符串长度时,size()函数与length()函数作用相同。除此之外,size()函数还可以获取vector类型的长度。例如:vector < int> ...转载 2019-03-18 13:58:16 · 1639 阅读 · 0 评论 -
求数组长度
C++求数组长度为:int arr_length = sizeof(arr) / sizeof(arr[0]);为了方便使用,在C语言中常定义宏来求数组长度#define ARR_LEN(array, length){length =sizeof(array) / sizeof(array[0]);}使用时,直接调用宏函数即可,如int arr[]={1,2,3,4,5}...原创 2019-06-10 15:07:05 · 1619 阅读 · 0 评论 -
c++数组的引用
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;引用最大的好处就是提高函数效率以及节省空间;关键问题一、传递引用与传指针、传值的区别?值传递 (pass by value),指针传递(pass by pointer),当发生函数调用时,需要给形参分配存储单元、当传递是对象时,要调用拷贝构...转载 2019-06-10 18:33:02 · 1077 阅读 · 0 评论 -
C语言cgi编程入门
本文译自Getting Started with CGI Programming in C。因为本人水平有限,难免有误,欢迎指正。这是一篇介绍如何使用C语言进行CGI编程的文章。假设读者了解C基础知识,并且可以写出简单的HTML表单和在Web服务器上安装CGI脚本。通过简单的范例对原理进行解释说明。两点重要提醒:为了避免浪费时间,请检查——通过恰当的本地文档或者联系Web服务器管理员—...转载 2019-06-27 10:51:51 · 1029 阅读 · 0 评论 -
C语言中##和#的作用
##的作用:把两个宏参数贴合在一起如在gpio-exynos4.h中:#define EXYNOS4_GPIO_NEXT(__gpio) \ ((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 1)EXYNOS4_GPIO_NEXT(EXYNOS4_GPIO_A0);//上句结果为:EXYNOS4_GPIO_A0_S...原创 2019-07-11 10:40:34 · 3009 阅读 · 0 评论 -
动态存储区、静态存储区、堆和栈的区别
C/c++程序经过编译连接后形成的二进制映像文件,这文件包含:栈,堆,数据段(只读数据段,已经初始化读写数据段,未初始化数据段即BBS)和代码段组成. 1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。...转载 2019-07-16 10:21:15 · 327 阅读 · 0 评论 -
(void)n; (void)变量
(void)n,主要作用就是避免应变量n未使用编译器警告。声明了一个变量但是却没使用 pthread_t const main_thread=pthread_self(); 编译的时候,一般会有warning,告诉你有未经使用的变量。一般可以直接忽视掉这种warning。可以用如下方面避免: pthread_t const main_thread=pthread_self(); ...原创 2019-09-07 13:50:16 · 530 阅读 · 0 评论 -
C/C++框架和库
- 1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.cz/~cz210552/webbe...原创 2019-09-22 23:18:36 · 302 阅读 · 0 评论 -
调用函数时,栈的变化
首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(地址地)。下图为典型的存取器安排,观察栈在其中的位置入栈操作:push eax; 等价于 esp=esp-4,eax->[esp];如下图出栈操作:pop eax; 等价于 [esp]->...转载 2018-05-30 09:35:17 · 2737 阅读 · 4 评论 -
函数模板的具体化有什么意义。
比如,你定义了一个函数模板template<typename T>void func(const T& t){ dosomething(t);}但是,当T是整数的时候你不想dosomething,而是想killsomeone,那就需要具体化了。具体化有2种形式,一种是显式具体化即定义一个特殊类型的实现template<>void func<int>...原创 2018-06-12 10:34:55 · 901 阅读 · 0 评论 -
sizeof与strlen的区别
char str[20]="0123456789"; int a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0'为字符串结束标记。 int b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响========================================...转载 2018-03-13 13:05:25 · 148 阅读 · 0 评论 -
C语言结构体(struct)常见使用方法
基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合)的变量封装在内部,通过一定方法访问修改内部变量。结构体定义:第一种:只有结构体定义[cpp] view plaincopystruct stuff{ ch转载 2016-01-05 13:34:19 · 698 阅读 · 0 评论 -
联合体(union)的使用方法及其本质
1.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全转载 2017-06-30 16:16:55 · 466 阅读 · 0 评论 -
C语言 指针 详解 一
数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。现在假设有一个 char 类型的变量 c,它存储了字符 'K'(ASCII码为十进制数 75),并占用了地址为 0X11A 的内转载 2017-07-01 10:10:37 · 353 阅读 · 0 评论 -
C语言 指针 详解 二 C语言指针变量的运算
指针变量保存的是地址,本质上是一个整数,可以进行部分运算,例如加法、减法、比较等,请看下面的代码:#include int main(){ int a = 10, *pa = &a, *paa = &a; double b = 99.9, *pb = &b; char c = '@', *pc = &c; //最初的值 printf("&a转载 2017-07-01 10:14:24 · 586 阅读 · 0 评论 -
C语言 指针 详解 三 C语言数组指针(指向数组的指针)
数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element)。数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存。以int arr[] = { 99, 15, 100, 888, 252 };为例,该数组在内存中的分布如下图所示:定义数组时,要给出数组名和数组长度,数组名可以认为是一个指针,它指向数组的第 0 个元素。在C语言中,我们转载 2017-07-01 10:27:32 · 507 阅读 · 0 评论 -
热敏电阻和温度转换公式和程序
NTC 热敏电阻温度计算公式Rt = R *EXP(B*(1/T1-1/T2))这里T1和T2指的是K度即开尔文温度,K度=273.15(绝对温度)+摄氏度;其中T2=(273.15+25)Rt 是热敏电阻在T1温度下的阻值;R是热敏电阻在T2常温下的标称阻值;B值是热敏电阻的重要参数;EXP是e的n次方; 转换得:1/T1 =ln(Rt/R)/B+1/T2,求TI,然后原创 2017-06-28 15:12:47 · 27044 阅读 · 0 评论 -
C++中的动态类型与动态绑定、虚函数、运行时多态的实现
动态类型与静态类型静态类型 是指不需要考虑表达式的执行期语义,仅分析程序文本而决定的表达式类型。静态类型仅依赖于包含表达式的程序文本的形式,而在程序运行时不会改变。通俗的讲,就是上下文无关,在编译时就可以确定其类型。动态类型 是指由一个左值表达式表示的左值所引用的最终派生对象的类型。例:如果一个静态类型为“类 B ”的指针p 指向一转载 2017-10-27 13:09:11 · 266 阅读 · 0 评论 -
C++用new来创建对象和非new来创建对象的区别
我们都知道C++中有三种创建对象的方法,如下:#include using namespace std;class A{private: int n;public: A(int m):n(m) { } ~A(){}};int main(){ A a(1); //栈中分配 A b = A(1); //栈中分配转载 2017-10-27 13:48:25 · 518 阅读 · 0 评论 -
C/C++之回调函数
C/C++之回调函数 今天讨论下C/C++中的回调函数。 在理解“回调函数”之前,首先讨论下函数指针的概念。函数指针(1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把这种指向函转载 2017-11-07 11:51:53 · 215 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针和指针数组的区别数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4转载 2017-11-02 11:50:34 · 280 阅读 · 0 评论 -
小数在内存中的存储表示
整数在内存中的存储方式比较简单,我们来看看小数在内存中的存储方式。首先,要学会十进制小数与二进制小数之间的转换。 (1)二进制小数转化为十进制小数 比如把二进制小数110.11转化为十进制小数,步骤如下: (2)十进制小数转化为二进制小数 方法是这样的:先分别把十进制小数的整数部分和小数部分转化为二进制,然后合并即可。当然整数部分很简单,直接进行二进制转化,而小数部分就不一样了...转载 2018-03-16 00:07:24 · 1852 阅读 · 3 评论 -
十大滤波算法程序大全(精心整理版)
十大滤波算法程序大全(精心整理版)1、限幅滤波法****************************************************函数名称:AmplitudeLimiterFilter()-限幅滤波法*优点:能有效克服因偶然因素引起的脉冲干扰*缺点:无法抑制那种周期性的干扰,且平滑度差*说明:1、调用函数GetAD(),该函数用来取得当前值转载 2015-12-29 10:49:56 · 849 阅读 · 0 评论