![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
EtcFly
这个作者很懒,什么都没留下…
展开
-
二维码的生成细节和原理
二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。这两天学习了一下二维码图片生成的相关细节,觉得这个玩意就是一个密码算法,在此写一这篇文章 ,揭露一下。供好学的人一同学习之。 关于 QR Code Specific转载 2017-10-26 11:25:19 · 693 阅读 · 0 评论 -
【C++专题】static_cast, dynamic_cast, const_cast探讨
本博文转自: http://www.cnblogs.com/chio/archive/2007/07/18/822389.html首先回顾一下C++类型转换:C++类型转换分为:隐式类型转换和显式类型转换第1部分. 隐式类型转换又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion) : 在混合类转载 2017-10-12 22:36:56 · 178 阅读 · 0 评论 -
c的多参设计原理
1 C语言中函数调用的原理函数是大多数编程语言都实现的编程要素,调用函数的实现原理就是:执行跳转+参数传递。对于执行跳转,所有的CPU都直接提供跳转指令;对于参数传递,CPU会提供多种方式,最常见的方式就是利用栈来传递参数。C语言标准实现了函数调用,但是却没有限定实现细节,不同的C编译器厂商可以根据底层硬件环境自行确定实现方式。函数调用的一般实现原理,请参考我的博文C语言中利用setjm...转载 2017-04-09 22:09:16 · 310 阅读 · 0 评论 -
struct成员的内存对齐问题:
1、自然对齐:及默认结构体变量成员中最大的长度设置为对齐字节如:struct node{ char a; int b; short c;};默认以最大长度int类型4字节对齐。此时占用内存为12byte2、指定对齐及#pragma pack(n) 设置以n字节对齐 超出n字节长度默认以超出字节长度对齐#pragma pa原创 2016-11-10 11:59:19 · 2898 阅读 · 0 评论 -
realloc、malloc、以及calloc函数的区别
对于这个说烂的问题 ,做一点感悟笔记。三者都是分配内存,都是stdlib.h库里的函数,但是也存在一些细微的差异。首先,对于malloc函数。其原型void *malloc(unsigned int num_bytes)num_byte为要申请的空间大小,需要我们手动的去计算,如int *p = (int *)malloc(20*sizeof(int)),如果编译器默认int为4字原创 2016-11-11 11:19:56 · 12462 阅读 · 6 评论 -
c里面位段分析
首先位段的定义为: struct 位段结构name{ TypeDef 位域名 : num; //num标志占用的位数};例如:struct Date1{ int a : 1; int b : 5;}date1; //这里a表示位域名 1表示占用一个bit那数据如何在内存中存储呢?在网上找了个存储原则:如果结构体中含有位域(bit-field),那么V原创 2016-04-04 16:00:56 · 403 阅读 · 0 评论 -
C++中的基类与派生类
派生类的继承方式总结:继承方式说明public基类的public和protected的成员被派生类继承后,保持原来的状态private基类的public和protected的成员被派生类继承后,变成派生类的private成员protected基类的public和protected的成员被派生类继承后转载 2016-03-15 22:24:23 · 381 阅读 · 0 评论 -
c里面关于变参数函数的理解
通常我们使用的C函数的参数个数都是固定的,但也有不固定的。比如printf()与scanf()。如何自己动手实现一个可变参数函数,这个还是有点技巧的。我们最常用的就是定义一个宏,使用printf或者printk,如下#define wwlogk(fmt, args...) printk(fmt, ## args)现在我们自己动手实现一个可变参数的函数,后面分析原理。首先看一转载 2015-11-13 16:53:02 · 499 阅读 · 0 评论 -
cin.get(),cin,cin.getline()的区别
记录下最近的学习总结:cin:读取一个数据,该数据依据流入的数据类型而定如:int a;则cin >> a,输入23.1, 则实际流入a的应该是23,而.1依旧存在于输入缓冲区里面但是,cin >> a 输入会忽略空格和回车,这点值得注意其次:cin可以用于错误类型的判断标值如:int ch;while (cin){cin >> ch;}可以用cin来检测输入原创 2015-09-16 23:05:55 · 430 阅读 · 0 评论 -
strcpy,strnpy和strlcpy的区别
strncpy的用法。它与strcpy的不同之处就在于复制n个字符,而不是把所有字符拷贝(包括结尾'\0')。 函数原型:char * strncpy(char *dst,const char * src, int n) 当src的长度小于n时,dst内的未复制空间用'\0'填充。否则,复制n个字符到dst,没有加'\0'。这里就要注意在字符串dst结尾处理加'\0'的情况转载 2015-09-04 16:15:08 · 712 阅读 · 0 评论 -
c++刷新缓冲区
在c++中,io操作都是有io对象来实现的,每个io对象又管理一个缓冲区,用于存储程序读写的数据。只有缓冲区被刷新的时候缓冲区中的内容才会写入真实的文件或输出设备上。那么,什么情况下会刷新输出缓冲区呢,有如下五种情况:1.程序正常结束。作为main返回工作的一部分,将清空所有的输出缓冲区。2.在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个转载 2015-09-10 08:47:16 · 959 阅读 · 0 评论 -
栈和堆的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2015-09-04 10:29:52 · 283 阅读 · 0 评论 -
数组指针和指针数组的区别
这两个名字不同当然所代表的意思也就不同。我刚开始看到这就吓到了,主要是中文太博大精深了,整这样的简称太专业了,把人都绕晕了。从英文解释或中文全称看就比较容易理解。指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针还要注意的是他们用法的区别,下面举例说明。int*转载 2015-09-04 12:17:26 · 292 阅读 · 0 评论 -
c中volatile的作用
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i;转载 2015-09-02 15:35:30 · 413 阅读 · 1 评论 -
探索#和##的用法已经限制
华丽的开头:在一些开源的软件中经常出现#和##得用法, 因此搞清楚其语意就变得很重要,尤其是一些C语言功底并不是那么扎实的童鞋来说(比如我)。其实#和##的作用可以统一用一句话来概括,"使得变量的组织和运用变得更加灵活", 有些读者可能刚开始无法理解,没关系,通过本文,相信您对#和##一定有一个深入的认识。好了,进入正题。 #的用法解释:一般#是将右侧宏参数格式化为一个字符串实...原创 2018-09-12 22:49:09 · 243 阅读 · 0 评论