随笔分类 - C/C++
摘要:错误:#include <iostream.h>#include <string.h>……string st("test string");……error C2065: 'string' : undeclared identifier解释:#include <string>using namespace std;因为在 using namespace std; 情况下,#include <string> 是使用 C++ string 类库;#include <cstring> 是使用 C 的stri
阅读全文
摘要:一个 L的 NUL用于结束一个ASCLL字符串两个L 的NULL 用于表示什么也不指向的指针标准的C编译器至少允许一条switch语句中有257个case标签。为了满足一个8bit的字符的所有情况。switch的另一个问题是它内部的任何语句都可以加上标签,并在执行时跳转到哪里,这就有可能破坏程序流的结构化。(类似于goto)证明在C语言中const并不表示常量,可以在switch-case语句的case中加一个状态case:const i,编译时会抱错,非常量;break语句中断了什么?break语句事实上跳出的是最近的那层循环语句或switch语句,由此导致AT&T的第一次网络故障。
阅读全文
摘要:#include <iostream.h>
#include <conio.h>
#include <stdlib.h> int main()
{ float a=1.0f; cout<<(int)a<<endl; cout<<&a<<endl; cout<<(int&)a<<endl; cout<<"结果= "<<((int)a==(int&)a)<<endl; float b=0.0f; cout<
阅读全文
摘要:位运算符有:&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 优先级从高到低,依次为~、&、^、|与:用法,一,某些位清零或:某些位置 1 ;异或:用法是求一个位串信息的某几位信息的反
阅读全文
摘要:自己经常忘记使用printf和scanf的函数格式用scanf()函数从键盘接收十六进制字符是用%x就可以.比如:#include<stdio.h>void main(){int x;printf("请输入0~9或a到f的字符:");scanf("%x",&x);printf("接收的十六进制字符为:%x\n",x);}用printf()函数输出十六进制字符,加上#,输出0x,02表示用0填充,2表示输出的位数;printf("result1=%#010x,result2=%#010x;",re
阅读全文
摘要:这里有一个#define定义的优雅集合,允许程序建立常量使它们看上去更像是屏幕的图形,使程序的自描述能力增加,该宏利用了十六进制和二进制的转换方法,当按照自己的意愿画好图,该宏将自动转化成十六进制数;#define X )*2+1#define _ )*2#define S ((((((((((((((((0unsigned int myarray[]={ S _ _ _ _ _ X X X X X _ _ _ X X _ , S _ _ _ X X X X X X X X X _ X X X, S _ _ X X X _ _ _ _ _ X X X _ X X, S _ X X _ _ _
阅读全文
摘要:1、指针很难用,考得很烦——指针很好用,正确的用法不会出错——引用效果更好2、const干嘛的,多余——哦,可以这样用——还可以那样用——还真有效果——OMG,原来还可以这样用3、异常是什么,好像经常说——我都工作几年了,还不知道到底有什么存在的意义——哦,原来是这样,这种情况下没它还不行——总结出错误处理机制4、模板是什么,有用吗——坚持学一下,难懂又难用——哦,还真有地方离不开模板——自己写写小模板用——STL——boost——明白模板的价值,能在合适的地方用5、总听说算法是灵魂——那些排序、查找吗——好像也没什么难的,自己写个库,把这些包含进去——晕,STL里面都有了——哦,数学真的有用
阅读全文
摘要:对于多态性的理解加深,编译器的类型转换,以及我们在讲fish类的对象fh的地址赋给pAN之时,c++编译器进行了类型转换,此时pAn保存的是animal对象的地址。当fn函数执行pAn->breath()时,调用的就是animal的对象的breath函数。<-this指针anima对象内存fish新增加的部分当构造fish类的对象时,先从animal 的构造函数去构造animal对象,然后调用fish类的构造函数完成自身部分的构造,从而拼接出一个完整的fish对象,当讲fish类的对象转换成animal 的类型时,该对象被认为是源对象整个内存模型的上半部分,即为animal的对象所
阅读全文
摘要:static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?答案:答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为
阅读全文
摘要:#include <stdio.h>int main(){ const register int i = 0; printf("%d, %d\n", sizeof(const register int), sizeof(i)); return 0;}问题:编译不过!原因是,第一个sizeof测试类型的大小 类型的本质是创建变量的模子,编译器通过类型在内存中“咔”出变量的莫子,那么register是指的寄存器变量 从编译器的角度 不是模子的范畴 所以第一个编译不过但是第二个可以编译通过的 原因是第二个sizeof是测试变量的大小 这指明了类型是int其是reg..
阅读全文
摘要:QUESTION:const和volatile是否可以同时修饰一个变量?有什么特殊含义?ANSWER:如果一个变量不会被本程序改变,通常可能给它加上const,但如果该变量可能被其他程序改变而本程序又在检测这个变量的值,就需要给它加上volatile,于是变量就同时有volatile和const了const和volatile是可以同时修饰一个变量的const只是表示变量只读不能出现在赋值号左边防止程序“意外”修改并且编译器一定会做优化不会每次去内存取值这个时候如果外部事件如中断服务程序改了这个变量的内存值那么由于编译器优化就不会出有反应这样会导致错误加上volatile就告诉编译器不要做任何优
阅读全文
摘要:const 其实并不是真正的常量测试: const int two=2;switcj(i){case 1:...case two:;;;;;;;;///产生编译错误,需求常量表达式default:}================================================================================================================case语句至少有257个(ANSI C标准)。8bit+EOF 257个状态;================================一================
阅读全文
摘要:int 3机器码0cch,是无数人的最爱,你不见VC++不管是链接还是初始化,都用这个 0CCh来填,你不见所有运行在ring3的debug都使用这个0cc来插入你想中断调试的位置,以至在不去掉断点的情况下写盘,在你的代码中会发现这个莫名其妙的0CCh。
int 3不过是一个软件断点中断,你自己就可以任意修改这个中断,在anti-debug中,你可以通过修改这个中断给调试者带来巨大的惊喜,如果你能更深入一步的了解int 3的机制,你甚至可以指挥deubg运行,即别人调试你的程序,单步往前走,你可以让他按一个单步执行键后倒退几步,哈哈(这些都是善意的,千万不要学将那个倒退的指令改成将别人硬盘的启
阅读全文
摘要:【转】关闭对话框,OnClose和OnCancel MFC中屏蔽ESC和回车关闭对话框 我们知道,在对话框中,屏蔽ESC键自动退出可以选择重载OnCancel为哑函数的方法: void CXXXXDlg::OnCancel() { // TODO: Add your specialized code here and/or call the base class //CDialog::OnCancel(); //disable OnCancel } 但是,这样一来,右上角的关闭按钮也不起作用了,是因为点击关闭按钮时会自动调用CXXXXDlg::OnCancel()l从而完成对话框的关闭,由于C
阅读全文
摘要:<转自>http://blog.chinaunix.net/u1/34627/showart_462567.htmlC语言输入输出函数 1. fopen()函数 fopen函数用于打开文件, 其调用格式为: FILE *fopen(char *filename, *type); 在介绍这个函数之;前, 先了解一下下面的知识。 (1) 流(stream)和文件(file) 流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为"流", 而将具体的实际设备叫做文件。流是一个逻辑设备, 具有相同的
阅读全文
摘要:First-chance exception in KERNEL32.DLL 0xE06D7363 Microsoft C++ Exception 在VC中调试程序时,Output窗口有时会出现“First-chance exception in xxx.exe...”这样的信息。一般来说,这是由于程序中发生了异常,被VC捕获而产生的输出。在调试器中运行程序时,如果程序产生异常,调试器会首先获得通知(即First-chance exception),而后此异常由产生它的程序负责捕获。如果程序没有捕获此异常,那么调试器会再次被通知(即Second-chance exception,Last-ch
阅读全文
摘要:形参 int *&v1 的定义应从右向左理解:v1是个引用,与指向int型的对象的指针相关联,也就说,v1只是个传递进swap函数的任意指针的别名,#include <iostream>using namespace std;void swap(int *&v1,int *&v2){int *tmp=v2;v2=v1;v1=tmp;}int main(){int i=10;int j=20;int *pi=&i;int *pj=&j;cout<<"Before swap()\tpi:"<<*pi&l
阅读全文