C/C++大海捞针
文章平均质量分 77
woods2001
IT农民工一枚
展开
-
回调函数详解
<br />对指针的应用是C语言编程的精髓所在,而回调函数就是C语言里面对函数指针的高级应用。简而言之,回调函数是一个通过函数指针调用的函数。如果你把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是回调函数。为什么要使用回调函数呢?我们先看一个小例子: Node * Search_List (Node * node, const int value) { while (node原创 2011-05-11 22:52:00 · 684 阅读 · 0 评论 -
基本算法—链表逆序
<br />算法描述<br /> 关于这个问题,解决办法是遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转,利用已经存储的指针往后继续遍历。<br />算法实现<br />node * reverse(node * head){ node *p, *q, *r; if(head->next == NULL)/*链表为空*/ return head; p = head->next;原创 2011-05-10 22:19:00 · 568 阅读 · 0 评论 -
cdecl、stdcall、fastcall函数调用约定区别
在C语言中,假设我们有这样的一个函数: int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在原创 2011-08-22 10:43:19 · 597 阅读 · 0 评论 -
__attribute__ 详解
From http://hi.baidu.com/cygnusnow/blog/item/8b82000f871fcf2f6159f3de.htmlGNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(原创 2011-08-22 10:23:36 · 673 阅读 · 0 评论 -
归并排序
归并排序:二路归并排序 此算法采用自顶向下的归并排序算法,算法形式简洁,首先设排序的当前区间为a[low...high]具体步骤: 分解:将当前区间一分为二,即求分裂点。 求解:递归地对两个子区间a[low...middle]和a[middle+1...hi原创 2011-09-22 10:55:26 · 436 阅读 · 0 评论 -
如何检测内存泄漏(转)
编者按: 这几天在调试课本上关于二叉树的有关代码,发现严的这本数据结构教程喜欢把简单问题复杂化,当然这是从学生角度出发,从个人角度出发,这本书注重代码的可读性、重用等,更侧重于与软件工程、软件组织结合,当然是不错的教材。比如,其栈和队列的顺序实现,也都用指针来代替数组,让学生是很转载 2011-10-12 10:26:57 · 630 阅读 · 0 评论 -
无法解析的外部符号 _main解决办法
许多新手在编程时经常遇到“无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用”这样的错误,最近看了一些这方面的书籍,现将解决方案大概叙述一下:连接程序在负责连接可执行程序时,选择相应的c/c++运行时启动函数。如果设定了/subsystem:windows连接程序开关,那么连接程序会试图寻找WinMain或wWinMain函数。如果连个函数都不存在转载 2011-11-08 22:45:56 · 4506 阅读 · 0 评论 -
C++构造函数语义——默认构造函数
0、前言 《The C++ ARM》告诉我们:“默认构造函数会在需要的时候自动生成(被编译器)。”然后“在需要的时候”是一个很抽象的概念,本文主要描述的问题也正是这些需要的情况。 我们看看下面的代码片段:class Foo{ public: int val; Foo *pnext;};void foo_bar(){ Foo bar;原创 2012-03-26 15:19:20 · 7348 阅读 · 0 评论 -
函数调用过程探究
引言如何定义函数、调用函数,是每个程序员学习编程的入门课。调用函数(caller)向被调函数(callee)传入参数,被调函数返回结果,看似简单的过程,其实CPU和系统内核在背后做了很多工作。下面我们通过反汇编工具,来看函数调用的底层实现。 基础知识我们先来看几个概念,这有助于理解后面反汇编的输出结果。栈(stack)栈,相信大家都十分熟悉,push转载 2013-02-01 11:35:05 · 541 阅读 · 0 评论 -
《effective C++》 目录
改变旧有的c习惯(shifting from c to c++) 013条款1:尽量以 const 和 inline 取代 #define 013prefer const and inline to #define.条款2:尽量以 [iostream] 取代 [stdio.h] 017prefer [iostream] to [stdio.h].条款3:尽量以 new 和 de原创 2013-04-25 18:59:02 · 900 阅读 · 0 评论 -
临时变量的属性均为const
在重温《effective C++》的时候,pick up的一个知识。#include using namespace std;class retional {public: retional(int num=0, int den=1):num(num),den(den){} int numerator() const; int denminator() co原创 2013-04-25 15:52:06 · 789 阅读 · 0 评论 -
快速排序
<br />快速排序算法思想: <br /> 快速排序的基本思想是:假设当前待排序的无序区为A[low……high],利用分治法描述为:<br /> 1.找出基准点位置,pivotPos,使得{i | i<=pivotPos}的所有元素均小于pivot,并且{i | i>=pivotPos}的所有元素均大雨pivot的值。<br /> 2.通过递归调用快速排序对左,右子区间进行快速排序,从而分治的得到结果。<br /> 在实现快速排序的过程中,最重要的是划分算法和分治的思想。<br />快速排序代原创 2011-05-09 21:11:00 · 588 阅读 · 0 评论 -
C++中默认构造函数的生成(哪些情况会产生默认构造函数)
#include #include using namespace std;//#define FOO_NON_DEFAULT_CONSTRUCTclass A{public: A():a(0){ cout << "construct..." << endl; } A(int value):a(value){ cout << "construct..." << en原创 2011-06-24 14:13:00 · 1898 阅读 · 2 评论 -
前置声明,操作符++和--的用法之我见
<br />前置声明<br /> 1、现象<br /> 所谓前置声明是指一个类型在定义之前就被用来定义变量和声明函数。<br /> 对于编译器来说,编译的源文件中可以前置声明各种未知是否定义的类型,但是需要使用该类型的话,就必须知道该类型的定义,编译器方可根据定义分配内存,否则编译器将会乐意的给你编译结果中报个错。<br /> #include <stdio.h>#include <stdlib.h>typedef struct _Jason Jason;/*struct _Jason类型具原创 2011-03-29 21:37:00 · 1002 阅读 · 3 评论 -
二叉排序树总结(插入,搜索,排序,中序遍地,递归,非递归)
#include #include #include "stack.h"using std::cout;using std::endl;//#define TEST_STACK#define TREE_NODE_SIZE 50//定义树结点类型class Node{public: int data;//数据 Node *parent;//父结点 Node *left;//左子结点 Node *right;//右子结点 //构造函数 Nod原创 2011-05-19 13:26:00 · 2830 阅读 · 2 评论 -
引用和指针
<br /> 引用和指针一.引用1.1 引用的概念<br /> 引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。<br /> 例如: Point pt1(10,10);<br />Point &pt2=pt1; 定义了pt2为pt1的引用。通过这样的定义,pt1和pt2表示同一对象。<br /> 需要特别强调的是引用并不产生对象的副本,仅仅是对象的同义词。因此,当下面的语句执行后:<br />pt1.offset(2,2);<br />pt1和pt2都具有(12,12)原创 2011-05-23 19:46:00 · 656 阅读 · 0 评论 -
C++中Static作用和使用方法
<br /><br />1、什么是static?<br /> static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。<br /> 2、为什么要引入static?<br /> 函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显原创 2011-05-25 21:42:00 · 517 阅读 · 0 评论 -
GDB 反向调试(Reverse Debugging)
<br />使用调试器时最常用的功能就是step, next, continue,这几个调试命令都是“往下执行”的, 但是很多时候会有这种需求:你在调试的过程中多跳过了几步而错过中间过程,这时候不得不重头调试一遍,非常麻烦。而GDB从7.0版本开始支持反向调试功能,也就是允许你倒退着运行程序,或者说撤销程序执行的步骤从而会到以前的状态。直观地来看,加入你正在使用GDB7.0以上版本的调试器并且运行在支持反向调试的平台,你就可以用以下几条命令来调试程序:reverse-continue反向运行程序知道遇到一个原创 2011-05-31 22:36:00 · 891 阅读 · 0 评论 -
C语言基本数据类型详解
原帖地址:http://www.cnblogs.com/jcsu/articles/1317826.html一、基本数据类型 1. 基本数据类型的分类:C语言中的三种基本数据类型是:整型 、实型 、字符型 。每种类型又可以分为常量和变量。整型常量: (1) 十进制的整型常量:由数字0~9组成。如:0、10、365、-12等。(2) 八进制的整型常量:以0开头,由数字0~7组成。如:0、原创 2011-06-08 22:14:00 · 27930 阅读 · 2 评论 -
重载和覆写的区别
重载是编写一个与已有函数同名但是参数表不同(参数数量活参数类型不同)的方法,它具有如下所示的特征: 1. 方法名必须相同 2. 参数列表可以不相同 3. 返回值类型可以不相同 覆写是派生类重写基类的虚函数,它具有如下所示的特征: 1. 只有虚函数和抽象方法才能够覆写 2. 具有相同的函数名 3. 具有相同的参数表 4. 具有相同的返原创 2011-06-15 13:30:00 · 1469 阅读 · 0 评论 -
堆排序,插入,删除,调整算法(大顶堆)
#include #include /*堆以数组为组织方式,下标从0开始*/#define INIT_ARRAY_SIZE 50/*函数声明部分*/void build_heap(int par_array[], int length);void max_heap_adjust(int par_array[], int index);void heap_sort(int原创 2011-06-17 17:10:00 · 9433 阅读 · 0 评论 -
插入排序——C语言描述
#include #include /*函数声明部分*/void insert_sort(int par_array[], int array_size);void print_array(int par_array[], int array_size);void shell_sort(int par_array[], int array_size);/*函数定义部分*/原创 2011-06-21 11:11:00 · 1170 阅读 · 0 评论 -
交换排序——冒泡排序和快速排序——C语言描述
#include #include /*函数声明部分*/ void __quick_sort(int par_array[], int low, int high);void bubble_sort(int par_array[], int array_size);void quick_sort(int par_arrayp[], int array_size);原创 2011-06-21 16:22:00 · 814 阅读 · 0 评论 -
The Biggest Changes in C++11 (and Why You Should Care)
It’s been 13 years since the first iteration of the C++ language. Danny Kalev, a former member of the C++ standards committee, explains how the programming language has been improved and how it can转载 2013-04-26 09:36:18 · 784 阅读 · 0 评论