C/C++基础
文章平均质量分 66
freedom0203
你想了解什么?尽管来问吧
展开
-
超前引用
所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数。 一般情况下,C/C++要求所有的类型必须在使用前被定义,但是在一些特殊情况下,这种要求无法满足,例如,在类CMyView中保留了一个非模式对话框对象指针,该对象用于显示/修改一些信息。为了实现对话框“应用”按钮,把对话框做的修改立刻更新到view界面上,为此,需要在对话框类中需要保存view类的指针,这样定义转载 2008-01-24 11:04:00 · 503 阅读 · 0 评论 -
C++文件操作(fstream类)
在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout就表示把字符串"Write Stdout"和换行字符(n)输出到标准输出流。 2、析取器(>>) 从流中输入数据。比如说系统有一个默认原创 2008-01-24 14:55:00 · 1432 阅读 · 0 评论 -
深入理解sizeof
深入理解sizeof 最近在论坛里总有人问关于sizeof的问题,并且本人对这个问题也一直没有得到很好的解决,索性今天对它来个较为详细的总结,同时结合strlen进行比较。 一、好首先看看sizeof和strlen在MSDN上的定义:首先看一MSDN上如何对sizeof进行定义的:sizeof Operator sizeof expression The sizeof转载 2008-01-24 14:57:00 · 393 阅读 · 0 评论 -
sizeof
1. 定义: sizeof是何方神圣sizeof乃C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including a转载 2008-01-24 15:00:00 · 332 阅读 · 0 评论 -
字节对齐问题
字节对齐的问题 为了能使CPU对变量进行高效快速的访问,变量的起始地址应该具有某些特性,即所谓的“对齐”。例如对于4字节的int类型变量,其起始地址应位于4字节边界上,即起始地址能够被4整除。变量的对齐规则如下(32位系统):TypeAlignmentchar在字节边界上对齐short (16-bit)在双字节边界上对齐int and long (32-bit)在4字节转载 2008-01-24 15:04:00 · 368 阅读 · 0 评论 -
字节对齐和C/C++函数调用方式学习总结
字节对齐和C/C++函数调用方式学习总结1.先看下面的例子:struct A{ char c1; int i; short s; int j;}a;struct B{ int i; int j; short s; char c1;}b;结构A没有遵守字节对齐原则(为了区分,我将它叫做对齐声明原则),结构B遵守了。我们来看看在x86上会出现什么结果。先打印出a和b的各个成员的转载 2008-01-24 15:06:00 · 629 阅读 · 0 评论 -
API程序框架
#include //消息处理函数LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) //CALLBACK表示是个回调函数(把地址给windows,后者会呼叫前者){ HDC hdc ; //设备内容句柄 PAINTSTRUCT ps;原创 2008-03-19 15:09:00 · 588 阅读 · 0 评论 -
再读高质量C++C 编程指南
为了防止头文件被重复引用,应当用ifndef/define/endif 结构产生预处理块。 C++ 语言可以用const 来定义常量,也可以用 #define 来定义常量。但是前者比后者有更多的优点:(1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应原创 2008-04-08 14:42:00 · 535 阅读 · 0 评论 -
什么是回调函数
什么是回调函数? 简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。 为什么要使用回调函数? 因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。 如果原创 2008-04-16 10:27:00 · 3462 阅读 · 2 评论 -
函数调用规范
函数调用规范 当高级语言函数被编译成机器码时,有一个问题就必须解决:因为CPU没有办法知道一个函数调用需要多少个、什么样的参数。即计算机不知道怎么给这个函数传递参数,传递参数的工作必须由函数调用者和函数本身来协调。为此,计算机提供了一种被称为栈的数据结构来支持参数传递。 函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算。函数计算结束以转载 2008-04-16 10:14:00 · 739 阅读 · 0 评论 -
关于对数组名取地址的问题
//有这样一道题目: #include int main(void) { int **p; int arr[100]; p = &arr; return 0; } arr是数组的首地址,&arr就代表首地址的地址,由于首地址的地址是未知的,就可能原创 2008-08-21 09:22:00 · 1225 阅读 · 0 评论 -
C++中成员初始化列表的使用
C++在类的构造函数中,可以两种方式初始化成员数据(data member)。 1,在构造函数的实现中,初始类的成员数据。诸如:class point{private: int x,y;public: point(int m=0,int n=0) { x=m; y=n; } int GetX() { return x; } int GetY() { return y; }};转载 2008-08-21 11:52:00 · 18998 阅读 · 4 评论 -
关于cin流
cin是一个容器,装水的容器,你可以一次倒一桶水进去,然后一滴一滴的取出来, 也可以,一次全部抽出来..要把 /n这个字符放入到这个容器中,只有一个办法,那就是按回车,回车以后,C++内定,程序接收来自键盘的信息完毕,继续运行程序, 当你输入一条 abcdefg回车 首先,cin把全部的东西全部装了起来,这时候,你可以使使 coutcin.get(s);取出1个字符,放入s中,cin里面还剩原创 2008-08-21 15:39:00 · 1299 阅读 · 0 评论 -
链接错误LNK2001
学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于 编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时, 编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不 明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非 常困难。 初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为: unresol转载 2008-01-24 14:54:00 · 362 阅读 · 0 评论 -
空指针检测
某些C/C++编程的书中,曾经提到如何判断指针是否为空的问题.很显然,if (p == NULL), if (p == 0) 和if(p),都能够完成这一任务,差别在于可读性方面.我们分别加以讨论. 1. if (p == NULL)相当多的文章建议采用,他们中的部分人甚至认为,其他做法都是错误的.这个形式一个变种是 if (NULL == p),虽然略显怪异,但是,万一我们误将转载 2008-01-24 14:53:00 · 1870 阅读 · 0 评论 -
指针函数和函数指针的区别
指针函数和函数指针的区别 1,这两个概念都是简称,指针函数是指带指针的函数,即本质是一个函数。我们知道函数都又返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示:返回类型标识符 *返回名称(形式参数表) { 函数体 } 返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型转载 2008-01-24 14:26:00 · 370 阅读 · 0 评论 -
编译器的一些预处理机制
有些新手会对编译器的一些预处理机制不是很明白,所以写点相关的东西。内容主要来源:《c primer plus》及 《c++ primer》 在程序编译之前,首先由预处理器检查程序。在 GCC 工具链中,gcc 和 g++ 分别是C/C++ 编译程序,而预处理程序叫 cpp,是独立的。根据程序中使用的预处理器指令,预处理器使用符号缩略语所代表的内容替换程序中的缩略语。预处理指令以 # 为行首,转载 2008-01-24 14:04:00 · 887 阅读 · 0 评论 -
论程序设计方法
论程序设计方法 本文是我在“软件工程师班”开学第一节课的讲义,和“计算机软件设计发展”讲座上的内容整理而成。写作本文的目的是引导学生从更高的层次来看待程序设计方法,为将来成为高级程序员而做好理论准备。一、计算机硬件环境对软件设计方法的限制 计算机的发明到现在已经60年了,计算机程序设计方法也伴随着计算机硬件技术的提高而不断发展。硬件环境对软件设计既有严重的制约作用,也有积极的推动作用转载 2008-01-24 14:10:00 · 589 阅读 · 0 评论 -
为什么 char** 不能自动转化为 const char**
为什么 char** 不能自动转化为 const char** 一次偶然的情况下我发现以下代码竟然无法被编译通过(如果你的编译器,比如VC6或VC2003,允许它编译通过,我想你首先应该换个编译器,比如GCC或VC2005):void foo( const char* [] ) { }int main( void ){ char* s[2]; foo( s );}简化成更一般转载 2008-01-24 14:13:00 · 1283 阅读 · 0 评论 -
关于模板中typename的用法
为什么中间有个typename? 为了分析模板定义,编译器必须能够区分出是类型以及不是类型的表达式.对于编译器来说它并不总是能够区分出模板定义中的哪些表达式是类型.例如:如果编译器在模板定义中遇到表达式Parm::name 且Parm 这个模板类型参数代表了一个类那么name 引用的是Parm 的一个类型成员吗?template Parm minus( Parm* arr原创 2008-01-24 14:21:00 · 609 阅读 · 0 评论 -
_T 这个宏究竟干些什么事情?
1 这个宏干什么? 2 Unicode和DBCS有何区别? 1、这个宏是指明字符串以Unicode形式存储、传输、使用。 2、Unicode是一种字符编码,每个字符在内存中占用两个字节。首先DBCS是亚洲的字符集,包含了ANSI,ANSI也就是ASCII值为0-255之间的字符,当字符为ANSI时,存放于文件中占用的是一个字节。如果是非ANSI的呢,则占用两字节转载 2008-01-24 14:29:00 · 479 阅读 · 0 评论 -
C++虚函数和多态
function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyit=window.open(http://www.365key.com/store转载 2008-01-24 14:31:00 · 353 阅读 · 0 评论 -
C++中的const(一)——和C中的区别
1.C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中.所以,以下代码:#include using namespace std;int main(){ const int a = 1; const int b = 2; int array[ a + b ] = {0}; for (int i = 0;转载 2008-01-24 14:41:00 · 441 阅读 · 0 评论 -
C++字符串完全指南 - Win32字符编码
前言字符串的表现形式各异,象TCHAR,std::string,BSTR等等,有时还会见到怪怪的用_tcs起头的宏。这个指南的目的就是说明各种字符串类型及其用途,并说明如何在必要时进行类型的相互转换。在指南的第一部分,介绍三种字符编码格式。理解编码的工作原理是致为重要的。即使你已经知道字符串是一个字符的数组这样的概念,也请阅读本文,它会让你明白各种字符串类之间的关系。指南的第二转载 2008-01-24 14:45:00 · 1113 阅读 · 0 评论 -
编译指令#pragma详解
编译指令#pragma详解With #pragma, C++Builder can define the directives it wants without interfering with other compilers that support #pragma. If the compiler doesnt recognize directive-name, it ignores转载 2008-01-24 14:47:00 · 447 阅读 · 0 评论 -
二进制文件处理
虽然有规则格式(formatted)的文本(到目前为止我所讨论的所有文件形式)非常有用,但有时候你需要用到无格式(unformatted)的文件——二进制文件。它们和你的可执行程序看起来一样,而与使用>操作符创建的文件则大不相同。get()函数与put()函数则赋予你读/写无规则格式文件的能力:要读取一个字节,你可以使用get()函数;要写入一个字节,则使用put()函数。你应当回想起ge转载 2008-01-24 14:49:00 · 1046 阅读 · 0 评论 -
关于UNICODE和_T宏
关于UNICODE和_T宏这是一个许多人(包括我自己)曾经或至今仍疑惑的问题(这里我们只讨论UTF-16,即双字节版本)。1.关于UNICODE首先,UNICODE主要使用的字符类型是WCHAR,定义是unsigned short。从定义我们可以看出这是一个双字节的类型,就是每一个字符占2个字节。这样的话,可以表示的字符类型就可以多达6万多。所有之前的ASCII码分布在0x0000-0x00转载 2008-01-24 14:51:00 · 691 阅读 · 0 评论 -
流类库和输入输出
第12章 流类库和输入输出本章要点: 1.流的概念及流类库; 2.输入输出的格式控制和ios 成员函数; 3.输入输出运算符的重载; 4.文件的输入输出。 12.1 输入/输出流的概念 C++完全支持C的输入输出系统,但由于C的输入输出系统不支持类和对象,所以C++又提供了自己的输入输出系统,并通过重载运算符“”和“>>”来转载 2008-08-21 15:01:00 · 2174 阅读 · 0 评论