C/C++
lmin_wang
这个作者很懒,什么都没留下…
展开
-
int main(int argc, char* argv[])
argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: int main(int argc, char* argv[]) { int i; for (i = 0; i<argc; i++) cout<<原创 2013-04-27 21:14:05 · 536 阅读 · 0 评论 -
引用作为函数返回值
“引用作为函数参数”与 “引用作为函数返回值”一、引用作为函数参数作为函数参数时引用有两种原因:1、在函数内部会对此参数进行修改2、提高函数调用和运行效率 关于第一点,都知道C++里提到函数就会提到形参和实参。如果函数的参数实质就是形参,不过这个形参的作用域只是在函数体内部,也就是说实参和形参是两个不同的东西,要想形参代替实参,肯定有一个值的传递。函原创 2013-08-28 10:23:01 · 531 阅读 · 0 评论 -
变量的声明与定义“extern”
如果你的变量在一个文件A中,而你想在另一个文件B中使用它,就需要在使用前在B中声明这个变量,这时候需要用到extern关键字。extern用在变量声明中常常有这样一个作用,你在*.c文件中定义了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。extern int a; //声明一个全局变量aint a; //定义一个全局变量aext原创 2013-09-01 15:06:34 · 900 阅读 · 0 评论 -
C语言的编译链接过程的介绍
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下: 从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链转载 2013-08-31 20:12:18 · 503 阅读 · 0 评论 -
C++中设计一个类,使其不能被继承
java中有一种类不能被继承,那就是final类.而C++中没有final类。 C++要实现一个不能被继承的类有很多方法. 主要的思路就是使子类不能构造父类的部分,这样子类就没有办法实例化整个子类.这样就限制了子类的继承. 所以我们可以将父类的构造函数声明成为私有的,但是这样父类不就不能实例化,继续思考、、、 我们可以利用友员不能被继承的特性! 首先假设CPare转载 2013-09-03 17:03:40 · 602 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析陈皓http://blog.csdn.net/haoel前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,转载 2013-09-05 22:45:27 · 462 阅读 · 0 评论 -
KMP字符串模式匹配详解
KMP字符串模式匹配详解KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。一. 简单匹配算法先来看一个简单匹配算法的函数:int Index_BF ( char S [ ], char T [ ], int pos ){/* 若串 S 中从第pos(S转载 2013-09-15 22:30:08 · 545 阅读 · 0 评论 -
构造函数定义为private,protected
将构造函数,析构函数声明为私有和保护的,那么对象如何创建?已经不能从外部调用构造函数了,但是对象必须被构造,应该如何解决?关于构造,析构函数声明为私有和保护时的用法???从语法上来讲,一个函数被声明为protected或者private,那么这个函数就不能从“外部”直接被调用了。对于protected的函数,子类的“内部”的其他函数可以调用之。而对于private的函数,只原创 2013-10-02 11:23:51 · 710 阅读 · 0 评论 -
extern “C”总结
经常看到如下代码:#ifdef _cplusplusextern "C" {#endif#include "XXX.h"#ifdef _cplusplus}#endif解释:这段代码的含义是,如果当前的程序是C++程序,那么下面引用的头文件是C文件, 那如果当前程序不是C++呢?难道包含的就不是C文件了么?当然不是,不管当转载 2013-10-08 10:01:23 · 565 阅读 · 0 评论 -
NULL指针,空指针,野指针
1. 空指针、NULL指针、零指针1.1什么是空指针常量0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相原创 2013-09-23 10:41:56 · 973 阅读 · 0 评论 -
Sizeof与Strlen的区别与联系
一、sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所原创 2013-08-28 09:27:42 · 418 阅读 · 0 评论 -
char* a和 char a[]的区别
char *a = "hello" 中的a是指向第一个字符‘a'的一个指针char a[20] = "hello" 中数组名a也是执行数组第一个字符‘h’的指针但二者并不相同:看实例:把两个字符串相加:结果:对比:结果:把字符串加到指针所指的字串上去,出现段错误,本质原因:*d="0123456789"存放在常原创 2013-08-27 21:47:52 · 577 阅读 · 0 评论 -
fflush(stdin)和fflush(stdout)
fflush(stdin)比较容易理解,即清理标准输入流,把多余的仍未被保存的数据丢掉。比如,下面这个小程序:void main(){ int a; char str[10]; cin>>a; cout<<a<<endl; cin>>str; cout<<str<<endl;}原创 2013-04-27 20:14:03 · 745 阅读 · 0 评论 -
C++指针和引用的用法
一、基本知识指针和引用的声明方式:声明指针: char* pc;声明引用: char c = 'A' char& rc = c;它们的区别:①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改原创 2013-04-18 21:44:26 · 883 阅读 · 0 评论 -
字符串字面值
字符串字面值的类型就是const char类型的数组。标准库函数strlen用于计算C风格字符串的字符个数,不包括null结束符。一、字符字面值字符字面值: 'A' //single quote:character literal字符串字面值: "A" //double quote:character string literal.包含字母A和空字符的字符串1.stri原创 2013-03-31 22:41:01 · 1912 阅读 · 0 评论 -
使用std::vector的陷阱
内容摘要 因为vector不象list,vector始终要保持一个完整的内存结构(因为就是一个数组),这样才可以让values[1]这样的方式正确运行. 但是,如果要在vector中间删掉一个成员的话,vector是这样做的, 先把该成员后面的一个成员,一直到最后一个成员往前一位置拷贝,这样需要删除的成员已经被后面的覆盖了, 然后再删除最后一个成员,这样,vector又能保持一段完整的内存结构了原创 2013-03-25 14:33:05 · 964 阅读 · 0 评论 -
第8章 标准IO库
标准IO库istream (输入流)类型,提供输入操作ostream(输出流)类型,提供输出操作cin:读入标准输入的istream对象cout:写到标准输出的ostream对象cerr:输出标准错误的ostream对象。cerr常用于程序错误信息。>>操作符,用于从istream对象中读入输入。getline函数,需要分别取istream类型和string类型的两个引用形参,其功能是从i原创 2013-04-07 22:28:45 · 524 阅读 · 0 评论 -
输出数据到文本ofstream和从文本中读取数据ifstream
1.使用文件输出的步骤 1)包含头文件fstream 2)创建一个ofstream 3)将该ofstream对象仝一个文件关联起来。 4)就像使用cout一样使用ofstream源代码:#include #include int main(){ using namespace s原创 2013-04-28 22:12:35 · 1092 阅读 · 0 评论 -
【C++ Primer】第八章 文件的输入输出
一、IO对象不可复制或赋值出于某些原因,标准库类型不允许做复制或赋值操作。比如,ofstream out1,out2;out1 = out2; //error:cannot assign stream objects//print function: parameter is copiedofstream = print(ofstream);out2 = print(out原创 2013-04-28 22:35:44 · 662 阅读 · 0 评论 -
float ,double类型在内存中存储方式
C/C++的浮点数据类型有float和double两种。 类型float大小为4字节,即32位,内存中的存储方式如下:符号位(1 bit) 指数(8 bit) 尾数(23 bit) 类型double大小为8字节,即64位,内存布局如下:符号位(1 bit) 指数(11 bit) 尾数(52 bit) 符号位决定浮点数的正转载 2013-08-21 10:17:17 · 931 阅读 · 0 评论 -
C++中的this指针
一个对象的成员函数其实就是一般的全局函数,只是编译器给它隐含加了一个指向该对象的const指针,这就是this指针。下面让我们一起来了解一下this指针吧!this 指针是一个隐含于每一个类的成员函数中的特殊指针(包括析构函数和构造函数),它用于指向正在被成员函数操作的对象。不过,在一般的程序设计中不直接用它的,this是一个指针变量,因此在成员函数中,可以使用*t转载 2013-08-14 21:08:33 · 481 阅读 · 0 评论 -
尽量使用初始化而不要在构造函数里赋值
看这样一个模板,它生成的类使得一个名字和一个t类型的对象的指针关联起来。templateclass namedptr {public: namedptr(const string& initname, t *initptr); ...private: string name; t *ptr;};(因为有指针成员的对象在进行拷贝和赋值操作时可能会引起指原创 2013-09-27 09:42:57 · 767 阅读 · 0 评论