C++
文章平均质量分 51
雨艺工作室
专业编程二十年
展开
-
CPP(四)理解操作符重载:进阶
操作符重载函数的格式是怎么的呢?原创 2014-06-04 12:31:51 · 682 阅读 · 0 评论 -
神奇的C语言十一:extern怎么用?
extern主要涉及的问题就是变量作用域。extern用于声明在原创 2014-05-28 10:25:05 · 779 阅读 · 0 评论 -
神奇的C语言十:数组下标的语法
首先看下面一段程序。这段程序可以编译通过。int main(){ char * str = "luxury"; int i; for (i = 0; i < 6; ++i){ printf("%c", i[str]); } printf("%c\n","hello!"[5]); int data[] = {1, 2, 3}; for (i = 0; i < 3; ++i){原创 2014-05-28 09:52:23 · 1167 阅读 · 0 评论 -
神奇的C语言九:sizeof埋下的陷阱
sizeof不是一个函数,虽然长得跟个函数似的。看下面的例子原创 2014-05-28 09:40:28 · 637 阅读 · 1 评论 -
神奇的C语言八:慎用switch
C语言是比较底层的语言,和机器指令很原创 2014-05-28 09:34:39 · 1361 阅读 · 0 评论 -
神奇的C语言七:为什么C++要抛弃printf?
1、printf不能直接输出一个类;原创 2014-05-28 09:24:40 · 2931 阅读 · 0 评论 -
神奇的C语言六:char可以是负数吗
C语言标准中没有规定char是signed char还是unsigned char,所以这就取决于编译器的实现了。原创 2014-05-28 09:06:28 · 8515 阅读 · 0 评论 -
神奇的C语言五:异常处理
写C代码的时候有时候异常处理原创 2014-05-26 16:08:17 · 990 阅读 · 0 评论 -
神奇的C语言四:typedef的使用
typedef,即类型定义,可以将我们能够在C语言中定义的任何类型表示为一个标识符。下面是一些原创 2014-05-26 15:35:31 · 638 阅读 · 0 评论 -
神奇的C语言三:二维数组与二级指针
例子3下面的输出是什么呢?#includeint a[2][5] = { 0,1,2,3,4,5,6,7,8,9};void f( int ** b){ printf( "%d\n", b[1][3]);}int main(){ f(a); return 0;}答案是会报段错误。解释如下:先看看一个更容易理解的版本,当然二者是等价原创 2014-05-26 15:28:42 · 791 阅读 · 0 评论 -
神奇的C语言二:数组名是什么
看一个例子int a[10];printf( "%d-%d", a, & a);猜测:这里的&会被编译器忽略。a在内存中是不存在的,内存中的是a[0] a[1]....a[9],上述printf打印的a在编译的时候就被替换成了a在内存中的地址。因为a是概念上的,而非内存中的,所以自然不存在地址,也就无法对它使用取址符。但是编译器很聪明,会忽略&。例子2原创 2014-05-26 15:27:17 · 901 阅读 · 0 评论 -
神奇的C语言十五:dummy代码?
问题一这是看LUA源码的时候遇到的,大概是这个样子:typedef UNUSED(x) ((void)x);void func( void * ptr){ UNUSED(ptr); // code without ptr}一开始很困惑UNUSE的作用是什么,后来高人指点才明白,这是为了防止编译器报Warning提示变量未使用。那既然没有使用这个变量,为什么还要声原创 2013-12-26 17:56:49 · 3985 阅读 · 0 评论 -
神奇的C语言十四:可变参数
下面是一个毫无意义的函数,使用可变参数,只是演示了va_系列函数的用法。:void func( int first, ... ) { va_list marker; va_start( marker, first ); // 初始化marker变量 int next = va_arg( marker, int); // 根据当前参数的字节数(即类型)取得下一个参数的地原创 2013-12-12 22:38:48 · 792 阅读 · 0 评论 -
神奇的C语言一:函数指针
从开始接触C语言到现在也算有两年了,还是会偶尔遇到一些神奇的问题。例子1int a[10];printf( "%d-%d", a, & a);猜测:这里的&会被编译器忽略。a在内存中是不存在的,内存中的是a[0] a[1]....a[9],上述printf打印的a在编译的时候就被替换成了a在内存中的地址。因为a是概念上的,而非内存中的,所以自然不存在地址,也就无法对它使用取址原创 2013-12-12 13:10:17 · 910 阅读 · 0 评论 -
CPP(三)理解操作符重载:初步
在C++中我们将操作符也看做函数。例如,重载操作符 + 时原创 2014-06-04 11:07:06 · 778 阅读 · 0 评论 -
C++类型转换
c++的四种类型转换原创 2015-09-17 13:28:56 · 519 阅读 · 0 评论 -
CPP(一)在希望中出发:类成员函数指针
看cocos2d-x中的类成员函数回调没有看懂原创 2014-04-04 12:32:38 · 806 阅读 · 0 评论 -
神奇的C语言十二:宏
宏的注意事项很多,您应该也了解不少。有一点可能需要注意一下,那就是宏的展开顺序。原创 2014-05-28 11:52:46 · 744 阅读 · 0 评论 -
神奇的C语言十三:关于void
下面的两个函数一样吗?void f1();void f2(void);原创 2014-05-28 12:05:04 · 693 阅读 · 0 评论 -
CPP(六)异常处理:绝望的沉重感
如果您擅长使用C,会 C++的异常处理原创 2014-06-04 15:40:06 · 1540 阅读 · 0 评论 -
CPP(五)理解操作符重载:应用
这一篇文章使用操作符重载实现 auto_ptr 类。如果您没有使用过此类,原创 2014-06-04 14:50:41 · 599 阅读 · 0 评论 -
CPP(二)再接再厉:STL容器类的使用
STL容器类的目的是提高工作效率,省去了我们自己建立原创 2014-06-04 10:31:13 · 673 阅读 · 0 评论 -
CPP(十)特殊的解释方式:和C的不同
这段代码作为C代码一般会报编译错误:#includeint main(){ int a = 1; int b = 2; (1 ? a : b) = 5201314; printf("%d %d", a, b); return 0;}但是同样的原创 2014-06-28 23:42:17 · 512 阅读 · 0 评论 -
CPP(八):bitset的实现与位操作
源码如下。只是实现了常规成员函数,没有写操作符重载的部分。#include using namespace std;template class bitset{private: unsigned char *data; int cnt_bytes; int cnt_bits; static unsigned char mask[8]; // 将位偏移转化为字节偏移 in原创 2014-06-11 23:38:23 · 1040 阅读 · 0 评论 -
CPP(七):priority_queue的实现与大根堆的使用
实现的一个按int类型值大小从小打到原创 2014-06-11 13:26:52 · 2247 阅读 · 0 评论 -
CPP(九):vector与迭代器的实现
vector的实现并不难,不过vector在实现原创 2014-06-12 17:54:38 · 1379 阅读 · 0 评论 -
CPP(十一):STL实现的底层数据结构简介
原文:http://blog.csdn.net/huangkq1989/article/details/7277282C++ STL 的实现:1.vector 底层数据结构为数组 ,支持快速随机访问2.list 底层数据结构为双向链表,支持快速增删3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾转载 2014-10-24 15:24:41 · 823 阅读 · 0 评论 -
神奇的算法:二叉树性质
1.树的度:树节点的子树个数称为度。节点最大的度,称为树的度。2.树的深度|高度:其实,就是树的层数。根节点深度为1。3.二叉树的五条性质:(1)在二叉树的第i层上至多有2^(i-1)个节点。(i>=1)(2)深度为K的二叉树至多有2^K - 1 个节点。(K>=1)(3)叶子节点为N0,度为2的节点数为N1,则N0 = N1 + 1 。(4)具有N个节点的完全二叉树的深度转载 2014-10-24 16:41:49 · 788 阅读 · 0 评论 -
神奇的C语言二十二:善用格式串format进行字符串处理
每个C程序员对格式化输出都十分熟悉。C的格式串的格式多样,原创 2014-06-12 19:50:45 · 1248 阅读 · 0 评论 -
神奇的C语言二十一:谈谈位运算
写C程序时位运算还是很常用的,您肯定也了解为运算的规则原创 2014-06-12 19:03:41 · 604 阅读 · 0 评论 -
神奇的C语言二十:谈谈类型转换
先看一个例子。请猜测下面的代码的输出是什么?#include int main(){ char a = 255; char b = 1; printf("%d %d\n", (unsigned char)(a + b), (unsigned char)a + (unsigned char)b); return 0;}如果你的答案是255原创 2014-06-12 18:24:16 · 695 阅读 · 0 评论 -
神奇的C语言十九:C语言的内存分配
这里 malloc不检查参数有效性,直接从堆中分配参数指定字节数的内存和一个用于记录此次分配的结构体。如果参数为0,分配仍然会发生。此时分配的内存不能进行操作,写入操作可能会覆盖其他变量,甚至是内存分配信息,造成程序的不稳定。free首先检查参数是不是NULL,如果是,返回;否则,认为参数指向的内存还没有被回收。根据参数找到记录该内存信息的结构体信息,并修改之(原创 2014-06-03 23:46:14 · 580 阅读 · 0 评论 -
神奇的C语言十八:volatile的应用
volatile是一个不常用的关键字,但是我们最好了解这个关键字的来龙去脉,以防止自己出错。volatile用于修饰一个变量,以告诉编译器:每次存取此变量时,都要按其地址来操作,而不要进行优化。volatile正是为了防止对某个变量的存取优化;如果没有优化,volatile关键字是没有作用的。下面是三个编译器优化的例子,解释了为什么需要volatile关键字。例子1多线程程原创 2014-06-03 23:38:06 · 618 阅读 · 0 评论 -
神奇的C语言十七:typeof关键字
这是C语言的一个新特性,目前使用还不是很广泛。大部分应用都是在宏中。如果您看过前面提及的sizeof关键字,就容易理解typeof了。typeof关键字用于获取括号内的表达式的类型。这个类型是一个编译器的内部表示。表达式不会生成代码。这和sizeof很类似。例子:typeof(int) a; // int atypeof(a) b; // int btypeof(++b) c;原创 2014-06-03 23:35:55 · 1114 阅读 · 0 评论 -
神奇的C语言十六:基本数据类型在内存中的分布
使用C语言编写一些底层应用的时候最好要知道基本数据结构的原创 2014-05-28 15:11:16 · 858 阅读 · 0 评论 -
[leetcode:7] 字符串转整数的溢出判断
#include#include #include#include#include#include#include #include using namespace std;void empty(const char* fmt, ...) {}#define print emptyclass Solution {public: char int_max[65原创 2015-11-30 11:57:39 · 2017 阅读 · 0 评论