摘要: typedef和#define的用法与区别一、typedef的用法在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:typedef int INT;typedef int ARRAY[10];typedef (int*) pINT;typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。二、#define的用法#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经 阅读全文
posted @ 2013-08-20 16:21 风风清清扬扬 阅读(1454) 评论(0) 推荐(1) 编辑
摘要: 一、 为什么需要命名空间(问题提出)命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。在 C语言中定义了3个层次的作用域,即文件(编译单元)、函数和复合语句。C++又引入了类作用域,类是出现在文件内的。在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们。 1、全局变量的作用域是整个程序,在同一作用域中不应有两个或多个同名的实体(enuty),包括变量、函数和类等。例:如果在文件中定义了两个类,在这两个类中可以有同名的函数。在引用时,为了区别,应该加上类名作为限定:class A//声明A类{public:void funl();//声明A类中 阅读全文
posted @ 2013-08-20 11:52 风风清清扬扬 阅读(596) 评论(0) 推荐(0) 编辑
摘要: 用变量a给出下面的定义:a)一个整形数(An integer)b)一个指向整形数的指针c)一个指向指针的指针,它指向的指针指向一个整形数d)一个有十个整形数的数组e)一个有十个指针的数组,该指针指向一个整形数f)一个指向有十个整形数数组的指针g)一个指向函数的指针,该函数有一个整形参数并返回一个整形数h)一个有十个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整形数答案:a)int a;b)int *a;c)int **a;d)int a[10];e)int *a[10];f)int (*a)[10];g)int (*a)(int);h)int (*a[10])(int); 阅读全文
posted @ 2013-08-20 08:58 风风清清扬扬 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 1.赋值不一定是初始化。例如AClassName::AClassName(const std::string &name, const std::string &address, const std::list &phones){ theName = name; //这些都是赋值 theAddress = address; //而非初始化 thePhones = phones; numTimesConsulted = 0;}AClassName::AClassName(const std::string &name, const st... 阅读全文
posted @ 2013-08-16 16:55 风风清清扬扬 阅读(182) 评论(0) 推荐(0) 编辑
摘要: FROM:C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。 PS:1.数组的数据,包括字符数组,都存储在栈中。而类似*str="abc";的指针字符串的数据存储在常量区。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有 阅读全文
posted @ 2013-08-15 15:39 风风清清扬扬 阅读(1198) 评论(0) 推荐(1) 编辑
摘要: 1.冒泡排序:简单的排序算法,时间复杂度O(n^2),对少量排序有效,排序效率最低,需要一趟一趟对比,一般作为其他排序算法的对比。2.插入排序:插入排序是对冒泡排序的改进,比冒泡快两倍,一般用于数据量不大于1000,或者重复排序超过200,或者部分已经排序的序列。3.希尔排序:希尔排序是将数据分成几组,每组之内在进行插入排序,最后对所有数据进行一次插入排序,以减少数据交换和移动次数。平均效率O(n*logn)。 希尔排序比冒泡排序快5倍,比插入排序快约2倍,比快排、归并排序、堆排序慢很多。适合数据量不大于5000,速度不是特别重要的场合。对数据量较小的数列重复排序是非常好的。4.选择排序:时间 阅读全文
posted @ 2013-08-05 09:30 风风清清扬扬 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 1.字符串原地翻转,"abc"->"cba":int str_reverse(string &str,int first,int last){ if(first>last) return -1;//对比失败 else if(first==last) return 0;//对比完成 if(str.length()"tom is cat":string str_word_reverse(string str){ int i=0,j=0,p=0,k=0,len=str.length(); string str_tmp(l 阅读全文
posted @ 2013-08-02 15:25 风风清清扬扬 阅读(486) 评论(0) 推荐(0) 编辑
摘要: 环境:vs2010说明:在阅读这部分内容之前应该先明确C++内存分配问题,那一篇文章说的比较清楚。1.字符数组,初始化:char str1[]="abc";char str1[]={"abc"};char str1[]={'a','b','c','\0'};//如果没有\0,运行通过,但有不可以意料的结果char str1[5]="abc";//字符数量<5,因为必须包含尾巴\0一些操作:str1[1]='g';//更改字符串中某个值cout< 阅读全文
posted @ 2013-07-30 17:47 风风清清扬扬 阅读(1372) 评论(0) 推荐(1) 编辑
摘要: 1.概述:const Type * pointer;常量指针(const在*之前,与类型的位置无要求),所指向的地址上的数据是常量,而指向的地址可以变化。Type * const pointer:指针常量(const在*之后), 指向的地址是常量,而地址上的数据可以改变。2.例子:#include "iostream"#define N 8using namespace std;void main(){ int n1=1; int n2=2; int * const p1=&n1;//指针常量, int const * p2=&n1;//常量指针, *p1= 阅读全文
posted @ 2013-07-30 17:20 风风清清扬扬 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 1.C++指针做形参,会有很多陷阱,很多时候也许并不如我们想的那样。比如我们想通过一个函数改变指针的值:#includeiostream> using namespace std; void test_point(int *p) { int a=2; p=&a; //关键点 } int main() { int x=1; int *p1=&x; test_point(p1); coutiostream>using namespace std;void test_point(int *p){ int a=2; *p=a; //关键地... 阅读全文
posted @ 2013-07-30 10:13 风风清清扬扬 阅读(517) 评论(0) 推荐(0) 编辑