随笔分类 -  03 【C/C++程序设计】

摘要:1. sizeof()和strlen()函数sizeof常见标准用法(1)、(2)、(3) [摘自C++ Reference]://(1)char buff[6];strncpy(buff, argv[1], sizeof(buff));//(2)int array[] = { 3, 1, 4, 1, 5, 9 };unsigned int array_size = sizeof(array) / sizeof(array[0]);//(3)typedef struct data_type { int age; char name[20];} data;data *bo... 阅读全文
posted @ 2012-03-11 11:45 Zollty 阅读(875) 评论(0) 推荐(0)
摘要:CString,是ATL/MFC共享的, string是C++标准库的相同点:(1)用他们都可以取代对char*的使用。(2)都封装了有丰富的字符串操作接口。(3)他们都是C++的类库。(4)他们都使用了模板的技术。以string的使用为例,不能有如下用法: string * pstr = NULL; //定义一个指向字符串的指针 pstr->append("Hello world."); //在该字符串的末尾粘接上另一个字符。这样做编译器不会有任何警告和错误,但是运行的时候就会有异常。原因是没有理解string是一个类,而在定义类的对象的时候是需要调用其构造函数的。 阅读全文
posted @ 2012-02-24 19:57 Zollty 阅读(1459) 评论(0) 推荐(0)
摘要:用CSDN这个编辑器排版真的是费时又费力,这个编辑器很弱,代码高亮显示插件也有问题(会乱码);相对而言,ChinaUnix博客的编辑器好用多了,可以直接将word文档的内容直接Copy到编辑器中而保持格式基本不变。但是想来CU人气不高,而且网速比较慢。写博文是体力活儿,我的本意只是想分享一些知识,我从互联网上学东西,“有借有还”,也得回报一下大家!今后我发表一些文章,都以pdf或doc的方式上传到百度文库中,免去我在博客编辑器上排版的痛苦,也便于大家浏览原文。我的百度文档地址:http://passport.baidu.com/?business&aid=6&un=zollty 阅读全文
posted @ 2012-01-31 22:06 Zollty 阅读(132) 评论(0) 推荐(0)
摘要:已上传到http://wenku.baidu.com/view/38914c54f01dc281e53af04b.html 阅读全文
posted @ 2012-01-31 22:06 Zollty 阅读(145) 评论(0) 推荐(0)
摘要:我学习C语言的时候,遇到的一个问题就是EOF。它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。 int c; while ((c = fgetc(fp)) != EOF) { putchar (c); }很自然地,我就以为,每个文件的结尾处,有一个叫做EOF的特殊字符,读取到这个字符,操作系统就认为文件结束了。但是,后来我发现,EOF不是特殊字符,而是一个定义在头文件stdio.h的常量 阅读全文
posted @ 2012-01-31 22:05 Zollty 阅读(179) 评论(0) 推荐(0)
摘要:从2001年Tiobe编程语言排行榜开始发布至今,C++几乎一直占据着第三名。虽然Perl, Visual Basic 和PHP曾经也排到第3名,但和C++相比,他们就显得弱爆了,因为他们最多只能保持几个月而已。然而相比C++,微软的编程语言C#却更被看好,甚至有人认为C#势必会取代C++,C++是垃圾语言。因为微软的大力推广,使用C#的人越来越多,而老将C++却正在被人遗忘。不甘寂寞,2011年C++再次亮剑,13年来第一个重大修订版,C++11横空出世!掀起C++ 11的神秘面纱C++标准在1998年获得通过后,有两位委员会委员预言,下一代C++标准将“肯定”包括内置的垃圾回收器(GC), 阅读全文
posted @ 2011-12-13 10:54 Zollty 阅读(205) 评论(0) 推荐(0)
摘要:利用移位运算、位与、位或,可以查询、修改某一bit的值。程序如下#define uchar unsigned char/*测试变量某一位是否为‘1’,是返回真,否返回假,num为待测试的数,bit为位数,其值从0到7,下同*/uchar bittest(uchar num,uchar bit) { if(num>>bit&0x01==1)return 1;elsereturn 0;}uchar bitclr(uchar num,uchar bit) /*清除某一位*/{uchar bit_value[]={1,2,4,8,16,32,64,128};return num&a 阅读全文
posted @ 2011-11-30 13:39 Zollty 阅读(835) 评论(0) 推荐(0)
摘要:通过实际测试,把复杂的函数分成几个子函数写运行速度会快一点,例如在某个函数内部需要交换两个数,写成temp=a;a=b;b=temp;不如写成swap(a,b);在外面定义swap函数,这样既方便,效率又高。为什么调用swap函数效率高呢? 其实也只是稍微高那么一点点,运行千万次也就快及毫秒,但是最主要是将函数模块化,加大了函数的重用率,使精力能够集中在主函数的逻辑上,这就是面向对象的好处之一吧。其速度快显然是因为编译器会将短小的swap函数声明为inline,所以加快了一点点速度。我们在定义swap函数时,也可以显式地将swap定义为inline函数:C语言的写法:inline void s 阅读全文
posted @ 2011-10-10 18:25 Zollty 阅读(218) 评论(0) 推荐(0)
摘要:1. 数组的最大长度问题int n[1000000];这样肯定是不行的,因为这样定义的数组用的是栈内存,系统默认值为最大1Mb,一个int型占4字节这样最大可以申请1024*1024/4=264144个,如果考虑到系统自身的占用最大值约为25000个。int *p=(int *)malloc(1000000*sizeof(int));,这样用的是堆内存,只要你内存有那么多的连续空间就可以。例子如下:#include<stdio.h>#include<malloc.h>int main(){ int *p=(int *)malloc(1000000*sizeof(int) 阅读全文
posted @ 2011-10-06 15:56 Zollty 阅读(223) 评论(0) 推荐(0)
摘要:输入输出流1. 用控制符输出格式,例:#include <iostream>#include <iomanip>//利用控制符输出必须包含iomanip头文件using namespace std;int main(){int a;cout<<"input a:";cin>>a;cout<<"dec:"<<dec<<a<<endl; //以十进制输出cout<<"hex:"<<hex<<a<< 阅读全文
posted @ 2011-09-13 17:20 Zollty 阅读(307) 评论(0) 推荐(0)
摘要:多态性与虚函数 面向对象理论中的3个术语:对象、方法和消息。对象(object):不言而喻,它是构成系统的基本单位,有属性和行为两个要素,在C++中,每个对象都是由数据和函数这两部分组成的,数据即是对象的属性,行为称之为方法(method),方法是对数据的操作,通常由函数实现。调用对象中的函数就是向该对象传送一个消息(message),所谓“消息”,其实就是一个命令。例如: stud.display();就是向对象stud发出的一个“消息”,通知它执行其中的display“方法”(即display函数)。即:stud是对象,display()是方法,语句“stud.display();... 阅读全文
posted @ 2011-08-22 15:18 Zollty 阅读(266) 评论(0) 推荐(0)
摘要:C++运算符重载“<<”和“>>”本来是在C++中被定义为左/右位移运算符的,由于在iostream头文件中对它们进行了重载,所以使用它们能用作标准数据类型数据的输入和输出运算符。因此,在使用它们的程序中必须包含:#include <iostream>1. 运算符重载例子:例1重载函数作为Complex类的成员函数class Complex{public: Complex operator +(Complex &c2); //声明重载运算符’+’的函数 ……};Complex Complex::operator + (Complex &c2) 阅读全文
posted @ 2011-08-18 10:12 Zollty 阅读(350) 评论(0) 推荐(0)
摘要:“将函数的返回值定义为引用”是一种比较有效的做法。例如(分析见程序的注释):#include<iostream>#include<string>using namespace std;char & get_val(string &str,int i)//返回类型为引用{//若去掉返回值的引用,则返回的是一个无名变量,其值是返回内容的一个拷贝而已,见下一个程序。 return str[i];}int main(){ string s("123456"); cout<<s<<endl; get_val(s,2)=& 阅读全文
posted @ 2011-08-17 16:33 Zollty 阅读(560) 评论(0) 推荐(0)
摘要:看一个例子就懂了:下面的程序,当程序接收用户输入时,如果用户输入d,则求数组的最大值,如果输入x,则求数组的最小值,如果输入p,则求数组的平均值。前面4个函数分别实现求最大值、最小值、平均值和未知算法,然后实现了GetOperation函数。这个函数根据字符的返回值指向上面4个函数。它是以函数指针的形式返回的,从后面的main函数的GetOperation(c)(dbData, iSize)可以看出,通过这个指针可以调用函数。#include<stdio.h>#include <assert.h>double GetMin(double *dbData, int iSi 阅读全文
posted @ 2011-08-17 14:33 Zollty 阅读(212) 评论(0) 推荐(0)
摘要:1. 结构和类的区别一个结构如下:struct Student{private: int num; char name[20]; char sex;public: void display() {…}};Student stud1,stud2;可以说结构只是类的一部分,struct声明的结构体类型实际上也是类类型。区别是,用struct声明的结构体类型,默认是public的,而用class定义的类,默认是private的。2. 成员函数在类之外定义void Student::display(){…}3. inline声明在类内定义的简... 阅读全文
posted @ 2011-08-08 16:57 Zollty 阅读(239) 评论(0) 推荐(0)
摘要:指针学习资料(zollty-2009)1.指向普通变量或者某个数或者字符串。例如int j,a[10];int *pointer_1,*pointer_2;pointer_1=&j;pointer_2=&a[7];2.指针作为函数参数。例如(主函数部分)pointer_1=&a;pointer_2=&b;if(a<b) swap(pointer_1,pointer_2);(交换两数的函数)void swap(int *p1,int *p2){ int temp; temp=*p1; *p1=*p2; *p2=temp;}swap接受主函数传来的两个数a和b 阅读全文
posted @ 2011-07-06 12:23 Zollty 阅读(198) 评论(0) 推荐(0)