C/C++
文章平均质量分 70
xyw_Eliot
Do it Do it right Do it right now
展开
-
C/C++函数如何传递二维数组
二维数组做参数,可以省略第一维的大小,但是不能省略第二维或者更高维的大小。void Function(int array[3][4]);void Function(int array[][4]);以上合法。void Function(int array[][]);这种不合法。这是与编译器寻址的原理有关的。因为对于数组int a[m][n],要取a[i][j]的值 (i>=0&&原创 2013-03-12 10:10:14 · 2221 阅读 · 0 评论 -
C++宏定义详解
一、#define的基本用法 #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。1 #define命令剖析1转载 2014-02-19 16:04:34 · 1651 阅读 · 0 评论 -
c位域
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://www.blogbus.com/yangwei-logs/1550489.html位域有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“转载 2014-02-19 16:49:23 · 931 阅读 · 0 评论 -
typedef和#define的用法与区别
typedef和#define的用法与区别一、typedef的用法在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:typedef int INT;typedef int ARRAY[10];typedef (int*) pINT;typedef可转载 2014-03-03 14:02:23 · 1017 阅读 · 0 评论 -
C/C++中const关键字详解
为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量: const 类型说明符 变量名 常引用: const 类型说明符 &引用名 常对象: 类名 const 对象名 常成员函数:转载 2014-03-03 16:39:29 · 1045 阅读 · 0 评论 -
结构体字节对齐
在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列,而不是简单地顺序排列,这就是内存对齐。 内存对齐的原因: 1)某些平台只能在转载 2014-03-04 10:04:32 · 1959 阅读 · 0 评论 -
结构体和类的区别
1.C的结构体和C++结构体的区别 1.1 C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。 1.2 C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。 1.3 C语言的结构体是不可以继承的,C++的结构体转载 2014-03-04 22:36:55 · 1329 阅读 · 0 评论 -
vector中的reserve和resize的区别
vector中的reserve和resize的区别reserve:分配空间,更改capacity但是不改变sizeresize:分配空间,同时改变capacity和size详解:1) reserve只是预留空间大小,并没有实际创建元素,所以不能引用其中的元素,此时vector的容量等于预留空间的大小,size为0;需要用push_back()/insert()函数插入元素。2原创 2014-04-01 09:28:17 · 2637 阅读 · 0 评论 -
C/C++内存分配知识
本文最开始写于2010年(http://www.51testing.com/html/38/225738-220959.html),发现这些概念还是很有用的,转移到现在这个博客上吧。C语言中内存分为五个区:栈(stack):用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。堆(heap):用来存放由动态分配函数(如malloc)分配的空间。是由转载 2014-03-24 23:12:41 · 1040 阅读 · 0 评论 -
条件变量、pthread_cond_init
1.初始化条件变量pthread_cond_init#include int pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *cattr);返回值:函数成功返回0;任何其他返回值都表示错误初始化一个条件变量。当参数cattr为空指针时,函数创建的是一个缺省的条件变量。否则条件变量的属性将由cattr中的转载 2014-05-06 23:35:32 · 1020 阅读 · 0 评论 -
POSIX多线程—互斥量概述
作者:阿波链接:http://blog.csdn.net/livelylittlefish/article/details/8096595(整半年没有更新,发几篇以前的读书笔记。) Content0. 序1. 基本概念2. 互斥量的例子3. 互斥量定义3.1 64位系统3.2 32位系统3.3 pthread_mu转载 2014-05-06 11:14:46 · 918 阅读 · 0 评论 -
C++内联函数
宏:就是使用一个字符串来代替一个表达式大妈或函数调用代码;编译之前,预处理器会使用这个宏字符串所代表的表达式代码或函数调用代码来替换所有出现的宏字符串,这样的话,用宏表示的函数调用代码就不用另外开辟函数栈,不用保护和恢复函数调用现场,这样就提高了代码的执行效率;所以,调用一个宏比调用一个函数更有效;但是调用宏的时候,有一个缺点:由于宏在预处理时使用的是宏字符串替换,所以,编译器在编译的时候不知转载 2014-04-24 20:00:37 · 1190 阅读 · 0 评论 -
c++ hash_map 详细介绍
为什么需要hash_map 用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改: 岳不群-华山派掌门人,人称君子剑 张三丰-武当掌门人,太极拳创始人 东方不败-第一高手,葵花宝典 ... 这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找转载 2014-05-10 15:30:54 · 980 阅读 · 0 评论 -
qsort和sort学习与比较
1.qsort函数:原 型: void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));功 能: 使用快速排序例程进行排序参 数:1 待排序数组首地址2 数组中待排序元素数量3 各元素的占用空间大小4 指向函数的指针,用于确定排序的转载 2014-04-11 14:22:31 · 981 阅读 · 0 评论 -
C++ 中各种map的使用
C++中有很多中key-value形式的容器,map/hash_map/unordered_map/vector_map。下面讲述各个map的使用及其区别。首先,map的基本使用方法如下:[cpp] view plaincopyprint?#include #include using namespace std;转载 2014-04-12 07:27:56 · 2401 阅读 · 0 评论 -
字符串/数字之间类型转换总结
1、char向int转换方法一:(适用于单个字符)char ch = '6';int num = ch - '0'; //此时num=6方法二:(适用于字符串)函数atoi: int atoi ( const char * str );参数是一个char类型的数组,不能是单个char变量char str[10] = "32352";int num = atoi(原创 2014-05-12 15:45:25 · 3901 阅读 · 0 评论 -
函数参数的压栈过程
1 _cdecl 按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于“C”函数或者变量,修饰名是在函数名前加下划线。对于“C++”函数,有所不同。如函数void test(void)的修饰名是_test;对于不属于一个类的“C++”全局函数,修饰名是?test@@ZAXXZ。 这是MFC缺省调用约定。由于是调用者负责把参数弹出栈,所以可以给函数定义个数不定的参数,如转载 2014-02-26 20:59:58 · 3853 阅读 · 0 评论 -
C++ 虚函数表解析
陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是转载 2014-02-21 20:54:19 · 945 阅读 · 0 评论 -
虚函数,虚析构函数,纯虚函数,抽象类
虚函数,虚析构函数,纯虚函数,抽象类。author: ZJ 07-12-31Blog: http://zhangjunhd.blog.51cto.com/1.虚函数1.1虚函数的作用虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。class Time{ public: Time(转载 2014-02-20 22:41:32 · 1157 阅读 · 0 评论 -
strcpy和memcpy函数原型
strcpy:char *strcpy(char *strDest, const char *strSrc){ assert((strDest != NULL)&&(strSrc != NULL)); char *address = strDest; while(*strDest++ = *strSrc++ != '\0'); return address;}mem原创 2013-03-14 16:11:49 · 1424 阅读 · 0 评论 -
经典C、C++、MFC、VC++教程,都是pdf完整版的
发现一个“新浪微盘”,空间大,下载方便,也没有广告。以后我会陆续把我的所有开发资料移到“新浪微盘”中,免费分享给大家。(1) 有“新浪微博”的可以直接拷贝资料到你自己的新浪微盘(我的新浪微盘 );(2) 没有“新浪微博”的,也很方便,也是可以直接下载或者在线浏览,速度也很快。"C++Primer+中文第四版(pdf高清完整版).pdf" http://t.cn/转载 2013-06-19 21:39:51 · 8463 阅读 · 1 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数转载 2013-07-22 14:31:19 · 946 阅读 · 0 评论 -
C/C++程序员必须熟练应用的开源项目
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟转载 2013-07-23 14:58:19 · 1359 阅读 · 0 评论 -
c/c++优先级列表
C优先级列表PrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grouping operatorArray accessMember access from a pointerMember acces转载 2013-08-05 14:40:52 · 907 阅读 · 0 评论 -
C++ assert()断言
assert是一个宏定义,原型定义在中:#include void assert( int expression );其作用是:如果条件expression返回错误,则终止程序执行。使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,可以通过在包含#include 的语句之前插入 #define NDEBUG 来禁用assert调用,示原创 2013-08-05 14:32:27 · 1169 阅读 · 0 评论 -
C/C++中的void和void*
一、voidvoid关键字表示“空类型”的概念。但是,这里的“空类型”不表示“任意类型”,而是表示不存在的意思,也就是说C/C++不允许你写语句void a,不存在类型为void的东西.void表示“不存在”的意思,可以从void的两个应用中加以体现:1、void作为函数的返回值类型时,表示函数返回值不存在,即函数没有返回值。例如:void FunctionNoReturn_0转载 2013-08-06 09:24:18 · 1721 阅读 · 0 评论 -
类对象和类指针的区别
本文整理自:http://blog.csdn.net/qq527249973/article/details/5970301如下程序: #include #include using namespace std; class Student { public: static int number; string name;原创 2013-08-06 19:28:21 · 1806 阅读 · 0 评论 -
C语言:va_start、va_end、va_arg 实现可变长参数
C语言:va_start、va_end、va_arg 实现可变长参数1、可变长参数即参数的个数不确定,个数可变。例如printf函数的定义:int printf( const char* format, ...); 2、C语言实现C语言可变参数通过三个宏(va_start、va_end、va_arg)和一个类型(va_list)实现:void va_start ( va_l原创 2013-08-07 10:19:15 · 2372 阅读 · 0 评论 -
图书推荐
Linux 管理:《Linux 系统管理技术手册》 案头必备的工具书。《鸟哥的 Linux 私房菜》不错的入门书。《Linux 101 Hacks》常用命令手册《UNIX Shell Scripting》写脚本的参考书《The Linux Command Line》更详细的命令手册Linux 编程:《Linux 系统编程》对常用 API转载 2013-09-11 10:12:49 · 1159 阅读 · 0 评论 -
C++中用rand()和srand()产生随机数方法介绍
标准库(被包含于中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void);从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))间的随机整数。 函数二:void srand(unsigned seed);参数seed是rand()的种子,用来初始化rand()的起始值。 可以认为rand()在每次被调用的原创 2013-09-13 14:33:19 · 1374 阅读 · 0 评论 -
argc与argv的含义
主函数main中变量(int argc,char *argv[ ])的含义:argc用来统计你运行程序时送给main函数的命令行参数的个数。* argv[ ]: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数.argv[0] 指向程序运行的全路径名argv[1] 指向在DOS命令行中执行程序名后的第一个字符串argv[2] 指向执行程序名后的第二个字符原创 2013-11-13 10:47:21 · 6701 阅读 · 0 评论 -
C++的4种类型转换关键字及其特点
1 reinterpret_cast'reinterpret_cast'转换一个指针为其它类型的指针。它也允许从一个指针转换为整数类型。反之亦然。(译注:是指针具体的地址值作为整数值?)这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。如果情况是从一个指针到整型的拷贝,内容的解释是系统相关转载 2014-02-20 20:08:12 · 852 阅读 · 0 评论 -
友元函数和友元类
采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和转载 2014-02-20 20:23:19 · 1023 阅读 · 0 评论 -
从3个程序理解C++类实例大小
程序1:#includeusing namespace std;class a{};class b{};class c:public a{ virtual void fun()=0;};class d:public b, public c{};int main(){ cout << sizeof(a) << endl; //1 cout << sizeof(b) <<原创 2014-02-20 21:27:23 · 1380 阅读 · 0 评论 -
30分钟了解C++11新特性
本文将对C++11的以上新特性进行简单的讲解,以便大家能够快速了解到C++11对C++的易用性方面祈祷的巨大作用。AD:WOT2014课程推荐:实战MSA:用开源软件搭建微服务系统什么是C++11C++11是曾经被叫做C++0x,是对目前C++语言的扩展和修正,C++11不仅包含核心语言的新机能,而且扩展了C++的标准程序库(STL),并入了大部分的转载 2014-05-27 09:12:36 · 867 阅读 · 0 评论