C++
qq_22821311
这个作者很懒,什么都没留下…
展开
-
list_entry()详解
Linux内核中,获取节点地址的函数list_entry()非常常用,由于其定义有点晦涩,先解析如下:list_entry的宏定义:#define list_entry(ptr, type, member) / ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member))) 这个倒是不难理解:从一个转载 2015-05-23 16:33:35 · 401 阅读 · 0 评论 -
va_start和va_end使用详解
本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(转载 2016-07-11 21:54:17 · 352 阅读 · 0 评论 -
C++ 关于构造,赋值函数
1 拷贝构造函数必须参数必须为引用, 如果不是会编译错误, 从逻辑上讲:拷贝函数会在 调用函数传递该类型 值类型的参数,返回该类型的值类型的参数 ,以及现实调用,如果拷贝函数参数也是值类型,前两者情况就会出现反复调用。2 赋值运算重载, 函数第二个参数也最好是const 引用 ,当类型重载加法或者别的运算需要用到该类型的临时变量时,该临时变量都是const 对象,先不说了,可能会表达错误原创 2016-07-24 15:18:36 · 343 阅读 · 0 评论 -
内存对齐,malloc内存对齐
1 #include 2 #include 3 using namespace std;4 5 int main()6 {7 struct {8 int a;9 long b;10 float c;11 double d;12 }var;13 int a[5] = {0};14 cout 15 cout 16 cout 17 cout原创 2016-07-02 13:03:25 · 1256 阅读 · 0 评论 -
返回函数的指针, 参数为函数指针。。。。。
C++通过引用传递数组 数组形参可以声明为数组的引用。如果形参是数组的引用,编译器不会将数组实参转化为指针,而是传递数组的引用本身。在这种情况下,数组大小成为形参和实参类型的一部分(实参长度与形参长度不同时,编译报错)。 void printValue(int (&a)[5]){...} int main(){ int i=0; int j[2]={0,1};转载 2016-07-16 22:07:26 · 380 阅读 · 0 评论 -
sizeof 指针 和数组名
1 #include 2 3 using namespace std; 4 5 void func(short arr[]) 6 { 7 cout 8 } 9 int main() 10 { 11 short arr[10] = {0}; 12 short *p = arr; 13原创 2016-06-20 16:56:53 · 493 阅读 · 0 评论 -
C++\C指针作为参数
在 用指针作为函数参数时1 参数指针指向实参内存地址,如果在函数里面从新赋值给参数指针地址,该参数不会指向实参地址了,因此,如果希望函数修改实参指针内容,必须在调用函数里面申请内存,并且在被调用函数里面解引用参数指针。原创 2016-07-20 19:53:36 · 323 阅读 · 0 评论 -
C++模版总结
函数模版:1 模版函数使用时,是不允许自动类型转换的,通过实参演绎,生成对应函数实例。2,模版实参演绎不是和模版函数的返回类型, 可以通过交换模版参数位置,实现返回类型的显示实例化。3 函数模版实例通常被看成用来命名一组重载函数的集合,所以用函数模版实例 去演绎 函数模版参数时,需要指定该函数模版实例的具体类型。(C++ templates P37,这句话看了好几天)4 使用字符串原创 2016-08-26 09:33:30 · 296 阅读 · 0 评论 -
快速 和堆 排序算法
#include #include #include #include using namespace std;void quickSort(int arr[], int i, int j){int i1 = i;int i2 = j;if(i {int tmp = arr[i];while(i {while(arr[j] >原创 2016-09-10 09:29:56 · 309 阅读 · 0 评论 -
sizeof 可变参数的模版特化 C++ templa
1 sizeof 测量函数返回值大小的时候,是不执行函数的2 可变参数列表可以没有一个参数,只是不能用参数了(这句不知到对不对)3 可变参数列表再模版实例化过程中比较弱;#include using namespace std;long long fun1(...){cout return 3l;}原创 2016-08-25 20:18:02 · 1266 阅读 · 0 评论 -
利用杨辉三角求组合代码
//在数据类型内运算可以求得正确结果,代码有冗余,由三角矩阵的两列可以得出全部组合数列,暂时先用这种笨拙的方法#include using namespace std;int main(int argc, char* argv){ long long M,N,K;long long i,j; cin >> M; cin >>原创 2016-05-21 17:29:12 · 312 阅读 · 0 评论 -
重载操作符解析
重载操作符是个好青年,但是要吐槽的是,我们时常为了重载操作符编写许多重复的代码。这是枯燥的,但是也是必须的。你重载的越多,你的类的弹性就越大。但是,你也不能为所欲为。玩游戏总是遵守相应的规则,写重载操作符亦是如此! 以下是要遵守的游戏规则:一元操作符可以是不带参数的成员函数或带一个参数的非成员函数。二元操作符可以是带一个参数的成员函数或带两个参数的非成员函数。operator转载 2016-05-09 22:42:42 · 293 阅读 · 0 评论 -
opengl 配置问题
opengl的高级菜鸟问题 看了一本书《OpenGL三维图形系统开发与应用技术》,但是,其中涉及到glut.h文件的函数无法正常连接,典型的错误如下: ------ 已启动生成: 项目: gears, 配置: Debug Win32 ------ 1>正在链接... 1>GEARS.obj : error LNK2019: 无法解析的外部符号 ___glutInitWit转载 2016-05-18 10:50:11 · 384 阅读 · 0 评论 -
关于C C++的const详细讲解
C中的CONST C中CONST的使用: const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。 问题:const变量 &转载 2015-04-27 14:17:53 · 526 阅读 · 0 评论 -
new delete
有new就有delete 有构造就有析构翻译 2015-04-26 20:56:26 · 303 阅读 · 0 评论 -
C/C++中extern关键字详解
C/C++中extern关键字详解1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这转载 2015-08-17 10:19:37 · 287 阅读 · 0 评论 -
字符流stringstream详解
以下内容转自:http://www.usidcbbs.com/read-htm-tid-1898.htmlC++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。istringstream类用于执行C++风格的串流的输入操作。 ostringstream类用于执行C++风格的转载 2015-08-22 11:08:52 · 513 阅读 · 0 评论 -
linux系统编译C++程序时头文件和库文件搜索路径
C++编译时,教科书中写道:#include “headfile.h”优先在当前目录查找头文件;#include 从系统默认路径查找头文件。先前以为系统默认路径是环境变量$PATH指定的路径,在系统上一查,傻了眼:-bash-3.2$ echo$PATH/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/java转载 2015-12-21 16:51:43 · 730 阅读 · 0 评论 -
$@
$@: 代表规则中的目标文件名。如果目标是一个文档(Linux中,一般称.a文件为文档),那么它代表这个文档的文件名。在多目标的模式规则中,它代表的是哪个触发规则被执行的目标文件名。转载 2016-03-04 15:59:20 · 399 阅读 · 0 评论 -
Linux下C++中的内存对齐
1.首先第一个问题就是为什么要进行对齐,现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只转载 2016-02-29 20:26:49 · 448 阅读 · 0 评论 -
C++空类的作用一
项目里对象比较多,需要统一初始值,也需要根据该值判断对象的状态,nginx 开发指南使用空类来实现所有类型统一值的设定转载 2016-05-12 22:25:22 · 1148 阅读 · 0 评论 -
VC MFC工具栏(CToolBar)控件
VC MFC工具栏(CToolBar)控件工具栏工具栏控件在控件面板里没有对应的选项(图标),但有一个工具栏控件类CToolBar,所以我们如果要创建一个工具栏控件并显示在窗口里的话,只能用代码来完成,事实上任何一种控件,都可以用代码创建,如CButton按钮类,现举一个用代码创建按钮控件并显示在窗口里的例子。CButton类的Create成员函数可以创建一个按钮控件,这个函数的格式如转载 2016-05-27 20:38:53 · 590 阅读 · 0 评论 -
C++字节对齐总结+疑问
先看程序和图吧1 linux g++ 4.8.1版本原创 2016-10-02 11:26:35 · 309 阅读 · 0 评论