摘要:
示例代码如下:#include int asdf(int a){ printf("%d\n",a); return 0;}int main(){ int (*p)(int); asdf(5); p=asdf; (*p)(5); p(5); printf("asdf is %d,p is %d,*p is %d\n",asdf,p,*p); return 0; }问题,为什么asdf(5),(*p)(5),p(5)三种调用都正确且都能输出正确结果?解答:首先需要明确的一点:函数名不是指针,数组名也不是指针。函数名只是在编程时候代指函数入口地址的符号,函数入 阅读全文
摘要:
“野指针”不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种:一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是 delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用 阅读全文
摘要:
bind - boost头文件: boost/bind.hppbind 是一组重载的函数模板.用来向一个函数(或函数对象)绑定某些参数. bind的返回值是一个函数对象.它的源文件太长了. 看不下去. 这里只记下它的用法:9.1 对于普通函数假如有函数 fun() 如下: void fun(int x, int y) { cout (f, 3)(); //指出返回值的类型 void 9.2 对于非静态成员函数假如有: struct A { void func(int x, int y) { cout ptr_a(pa); //智能指针. 现在要向像 A::func 这样的非静态... 阅读全文
摘要:
map映照容器的元素数据是一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系。 map映照容器的数据结构是采用红黑树来实现的,插入键值的元素不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来。 使用map容器需要头文件包含语句“#include”, map文件也包含了对multimap多重映照容器的定义。 1、map创建、元素插入和遍历访问 创建map对象,键值与映照数据的类型由自己定义。在没有指定比较函数时,元素的插入位置是按键值由小到大插入到黑白树中去的,下面这个程序详细说明了如何操作ma... 阅读全文