C/C++
文章平均质量分 67
metasearch
这个作者很懒,什么都没留下…
展开
-
指针函数与函数指针的区别
指针函数和函数指针一、指针函数 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。 格式: 类型说明符 * 函数名(参数) 当然了,由于返回的是一个地址,所以类型说明符一般都是int。 例如:int *GetDate(); int * aaa(int,int); 函数返回的是一个原创 2005-11-23 22:11:00 · 1984 阅读 · 0 评论 -
堆内存申请与释放的标准流程
一个动态内存申请与释放的例子,这个例子包含了堆申请的必须的步骤,在申请堆内存的时候应改按照该步骤,否则会出现难以预测的后果。#include "iostream.h"void main(){ int size; cin>>size; int *array=new int[size]; //申请动态内存 if(array!=NULL) //一定要判断是原创 2005-11-24 16:30:00 · 1767 阅读 · 0 评论 -
引用小结
引用引用小结:1、 引用在声明的时候必须同时要初始化,否则会出现错误。int intone;int& rint=intone;2、 引用是从一而终的,在初始化后不会在指向其他的变量。任何对该引用的付值都是对引用所维系的目标付值,而不是将引用维系到另一个目标上。3、 由于引用本身不是类型,所以没有引用的指针和引用的引用。可以有指针的引用4、 用引用传递函数参数与指针的效果一样,传递的是原来的原创 2005-11-26 20:32:00 · 912 阅读 · 0 评论 -
C语言编程常见问题解答之编译预处理(转载)
本章集中讨论与预处理程序有关的问题。在编译程序对程序进行通常的编译之前,要先运行预处理程序。可能你以前没有见过这个程序,因为它通常在幕后运行,程序员是看不见它的,然而,这个程序非常有用。 预处理程序将根据源代码中的预处理指令来修改你的程序。预处理指令(如#define)为预处理程序提供特定的指令,告诉它应该如何修改你的源代码。预处理程序读入所有包含的文件和待编译的源代码,经过处理生成源代码原创 2005-12-06 20:56:00 · 3208 阅读 · 1 评论 -
编程求邮资最大的一个连续的区间
说是有n种面值的邮票,每个信封最多能贴5张邮票,编程求邮资最大的一个连续的区间,邮票面值为1,4,12,21,每个区间可以任意取5张任意的邮票.//某人的代码,按照标准筛选法来做的。#include using namespace std;struct {int n;//i这个点,由几张邮票构成int b;//i这个点,是否可以构成}st[200];int value[]={1,4,12,21};原创 2005-12-12 16:43:00 · 1416 阅读 · 1 评论 -
[关注大学生]Joel Spolsky给计算机系学生的建议 (转载)
[关注大学生]Joel Spolsky给计算机系学生的建议 document.title="[关注大学生]Joel Spolsky给计算机系学生的建议 - "+document.title虽然大概一两年前我还在夸夸其谈桌面应用程序是将来的潮流,大学生们现在还是偶尔向我请教职业发展的问题。所以我把我的建议写下来。以供学生们阅读,嘲笑,忽略。大多数锐气十足的学生从来不向前辈征求意见。在计算机原创 2005-12-12 16:28:00 · 834 阅读 · 0 评论 -
typedef详细解析
一.基本概念剖析 int* (*a[5])(int, char*); //#1void (*b[10]) (void (*)()); //#2double(*)() (*pa)[9]; //#3 1.C语言中函数声明和数组声明。函数声明一般是这样: int fun(int, double);对应函数指针(pointer to function)的转载 2008-03-04 14:31:00 · 549 阅读 · 0 评论 -
总结:内存映射文件与内存读写实现进程间通信的比较
内存映射文件与内存读写都可以实现进程间通信,其两者的差别如下:1、内存写需要手工申请内存以得到内存的起始地址和手工释放内存,而利用内存映射文件则不需要,映射完之后直接即可得到内存的起始地址,但是在用完之后要记得释放内核对象File、Map,Mapview等,否则会造成内存泄露。2、内存读写利用的是windows消息来传递起始地址指针,而内存映射文件利用内核对象的共享来实现进程间通信。原创 2008-03-05 10:08:00 · 1006 阅读 · 0 评论 -
windows核心编程--内存笔记
读书笔记:Windows内存结构:1、 进程的虚拟地址空间每个进程都有自己的私有内存地址空间,对于32位进程来说,这个地址空间是4GB,对于64位进程来说这个地址空间是16EB。当一个进程中的线程正在运行的时候,它只能访问该进程的内存空间,不能访问其他进程的内存。对于操作系统内存来说,他的内存也是隐藏的,在windows2000中的进程,其线程不可以访问操作系统的数据,而在win原创 2008-03-05 10:08:00 · 544 阅读 · 0 评论 -
windows下dll编程学习笔记
1、 DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。静态链接库与动态链接库的区别:(1) 静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。(2)原创 2008-03-05 10:08:00 · 743 阅读 · 0 评论 -
TLS 线程本地存储(转)
在多线程编程中, 同一个变量, 如果要让多个线程共享访问, 那么这个变量可以使用关键字volatile进行声明; 那么如果一个变量不想使多个线程共享访问,那么该怎么办呢? 呵呵, 这个办法就是TLS, 线程本地存储. 它的使用非常之简单, 只要对变量的声明使用__declspec(thread)就OK了. 下面我来举一个例子, 结合注释, 相信大家马上就能知道其”奥秘”了. #in原创 2008-03-05 10:09:00 · 835 阅读 · 0 评论 -
linux集群技术帖子地址
http://www.qqread.com/z/linux/jiqun/c.html欢迎您使用http://Blogmove.cn提供的"博客搬家"和"博文三窟"服务.原创 2008-03-05 10:09:00 · 334 阅读 · 0 评论 -
C++和java中的对象数组
今天在写程序的时候,发现了一个问题。C++中不支持带参数构造函数的对象数组。例如: class A{ int m_b;public: A( int b ):m_b(b){}};当定义 A a[20]; 或 A *a=newA[20]都会出现错误,提示没有默认构造函数,因为new的时候分配空间和初始化对象同时进行,而没有默认的构造函数,所以会出现错误。当出现这样的情况原创 2008-03-05 10:09:00 · 635 阅读 · 0 评论 -
拷贝构造函数和赋值操作的写法
重点:包含动态分配成员的类应提供拷贝构造函数,并重载"="赋值操作符。以下讨论中将用到的例子:class CExample{public: CExample(){pBuffer=NULL; nSize=0;} ~CExample(){delete[] pBuffer;} void Init(int n){ pBuffer=new char[n]; nSize=原创 2008-03-05 10:09:00 · 1345 阅读 · 0 评论 -
不用库函数实现strcpy
题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。 解说: 1.strcpy的实现代码 char * strcpy(char * strDest,const原创 2008-03-05 10:09:00 · 839 阅读 · 0 评论 -
函数返回值为引用的情况大多是在赋值函数中,目的是为了实现链式表达
函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达。例如class A{ A & operate = (const A &other); // 赋值函数}; A a, b, c; // a, b, c 为A 的对象 a = b = c;原创 2008-03-05 10:09:00 · 912 阅读 · 0 评论 -
高质量C++编程---函数设计,函数返回值类型
第6章 函数设计函数是C++/C程序的基本功能单元,其重要性不言而喻。函数设计的细微缺点很容易导致该函数被错用,所以光使函数的功能正确是不够的。本章重点论述函数的接口设计和内部实现的一些规则。函数接口的两个要素是参数和返回值。C语言中,函数的参数和返回值的传递方式有两种:值传递(passby value)和指针传递(pass by pointer)。C++语言中多了引用传递(pass byrefe原创 2008-03-05 10:09:00 · 1190 阅读 · 0 评论 -
指针或引用做为返回值
当函数返回指针的时候,返回的是一个地址;比如int *fun(int *p){ (*p)++; returnp;}当函数返回一个引用时,返回的是也一个地址;比如int& func(int& p){ returnp;}当返回引用的时候,函数可以作为左值来使用,也就是说可以实现链式表达式.指针或引用做为返回值时,必须得是当函数返回(结束后)依然存在在的值,所以不能是函数内部变量1)原创 2008-03-05 10:09:00 · 853 阅读 · 0 评论 -
C++中的友元函数
在说明什么是友元之前,我们先说明一下为什么需要友元与友元的缺点: 通常对于普通函数来说,要访问类的保护成员是不可能的,如果想这么做那么必须把类的成员都生命成为public(共用的),然而这做带来的问题遍是任何外部函数都可以毫无约束的访问它操作它,c++利用 friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作,避免把类成员全部设置成public,最大限度的保护数据成员原创 2008-03-05 10:10:00 · 982 阅读 · 0 评论 -
深入浅出浮点数(转)
深入浅出浮点数Floating Point Number In a Nutshell深入浅出浮点数Stephen SuenCopyright ?2005 Stephen Suen. All rights reserved.浮点数(Floating PointNumber)计算机系统中用于表达实数或者说小数的一种方式。由于其表达方式的原因,产原创 2008-03-05 10:10:00 · 1326 阅读 · 0 评论 -
double float 有效位数
float 为4个字节,表示为:一个符号位,8个指数位,23个尾数,所以有效位数由尾数来决定,即2^23=8388608为7位,指数的范围是2^(-127~127)double为8个字节:表示为:一个符号位,11个指数位,52个尾数来表示,所以有效位数为2^52=4503599627370496为15位,指数的范围为2^12-1=4095(-2047~2047)原创 2008-03-05 10:10:00 · 3564 阅读 · 0 评论 -
Qt、ACE、Boost等C++著名程序库的比较和学习经验
Qt、ACE、Boost等C++著名程序库的比较和学习经验 Qt、ACE、Boost等C++著名程序库的比较和学习经验1、C++各大有名库的介绍----C++标准库2、C++各大有名库的介绍----准标准库Boost3、C++各大有名库的介绍----GUI4、C++各大有名库的介绍----网络通信5、C++各大有名库的介绍----XML6、C++各大原创 2008-03-05 10:10:00 · 1221 阅读 · 0 评论 -
char *GetMemory3(int num)的问题
char *GetMemory3(int num){ char *p = (char *)malloc(sizeof(char) * num); return p; //返回指针p} void Test3(void){ char *str = NULL; str = GetMemory3(100); //这里指针str也和指针p的指向一样的内存原创 2008-03-05 10:10:00 · 946 阅读 · 0 评论 -
GetMemory的详解
void GetMemory(char *p){p = (char *)malloc(100);}void Test(void){char *str = NULL;GetMemory(str);strcpy(str, "hello world");printf(str);}请问运行Test函数会有什么样的结果?char *GetMemory(void){char p[] = "hello wor原创 2008-03-05 10:10:00 · 1291 阅读 · 2 评论 -
malloc和calloc
malloc()函数有一个参数,即要分配的内存空间的大小: void *malloc(size_t size); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。 void *calloc(size_t numElements,size_t sizeOfElement); 如果调用成功,函数malloc()和函原创 2008-03-05 10:10:00 · 1037 阅读 · 0 评论 -
google搜索引擎优化圣经
相信不少站长都听说过站长世界webmasterworld.com(也有的是翻为网管世界)这个论坛。这是世界上最著名的站长们聚集的地方,谈论各种与网站有关的话题,包括搜索引擎优化,网络营销,网站建设的技术问题,电子商务等等。 站长世界的创始人Brett Tabke,是搜索引擎优化领域里教皇级的人物。据说他以前是经常使用和实验各种作弊手段的人物,当然他现在已经改邪归正了,至少表面上看起来如此。原创 2008-03-05 10:08:00 · 329 阅读 · 0 评论 -
windows编程中的数据类型(转)
在windows编程中,有许多奇怪的数据类型,初学者不知道这些代表什么,下面就把一些数据类型列出如下:ATOM 原子(原子表中的一个字符串的参考)BOOL 布尔变量BOOLEAN 布尔变量BYTE 字节(8位)CCHAR Windows字符CHAR Windows字符COLORREF 红、绿、蓝(RGB)彩色值(32位)Const 变量,该变量的值在执行期间保持原创 2008-03-05 10:08:00 · 501 阅读 · 0 评论 -
字符串类型的转换(转)
本主题演示如何将各种 C++字符串类型转换为其他字符串。可以转换的字符串类型包括 char*、wchar_t*、_bstr_t、CComBSTR、CString、basic_string和 System.String。在所有情况下,在将字符串转换为新类型时,都会创建字符串的副本。对新字符串进行的任何更改都不会影响原始字符串,反之亦然。从 char * 转换示例说明此示例演示如何从 char *转换为上面列出的其他字符串类型。// convert_from_char.cpp// compile with /c原创 2008-03-05 10:09:00 · 399 阅读 · 0 评论 -
C++多态技术
C++多态技术作者:荣耀提交者:eastvc 发布日期:2003-12-14 19:38:12原文出处:http://www.royaloo.com/articles/articles_2003/PolymorphismInCpp_content.htm摘要本文描述了C++中的各种多态性。重点阐述了面向对象的动态多态和基于模板的静态多态,并初步探讨了两种技术的结合使用。 关键词多态 继承 虚函原创 2008-03-05 10:09:00 · 355 阅读 · 0 评论 -
AWE说明,32位系统如何访问8G内存
可访问大地址的应用 (Large-Address-Aware Executables)在Windows增加支持/3GB参数以前,一个应用程序是无法访问一个带有高位设置的指针.一个32位的指针只有前31位地址空间可以被用户模式的应用程序访问.这剩余的一位不用.因此有一些聪明的开发者因为其他的目的不愿意在处理内存地址空间时浪费这一位.(举例来说:可以用来标志一个指针引用其它应用程序分配的数原创 2008-03-05 10:09:00 · 2931 阅读 · 0 评论 -
多线程编程需要注意的几点
第1章 用户方式中线程的同步 1.仅一条语句用不用考虑线程同步的问题? 当使用高级语言编程时,我们往往会认为一条语句是最小的原子访问,CPU不会在这条语句中间运行其他的线程。这是错误的,因为即使非常简单的一条高级语言的语句,经编译器编译后也可能变成多行代码由计算机来执行。因此必须考虑线程同步的问题。任何线程都不应该通过调用简单的C语句来修改共享的变量。 2. 互锁函数有那些?原创 2008-03-05 10:09:00 · 1149 阅读 · 0 评论 -
函数指针与typedef
函数指针与typedef关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用。//形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2); } 第一行定义了一个指针变量pF转载 2008-03-04 14:35:00 · 542 阅读 · 0 评论 -
声明函数指针并实现回调
声明函数指针并实现回调作者:Danny Kalev 编译:赵湘宁 原文出处:Declaring Function Pointers and Implementing Callbacks 程序员常常需要实现回调。本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调。注意这里针对的是普通的函数,不包括完全依转载 2008-03-04 14:45:00 · 788 阅读 · 0 评论 -
windows进程间通信(转载)
摘 要 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。Microsoft Win32 API提供了多种进程间通信的方法,全面地阐述了这些方法的特点,并加以比较和分析,希望能给读者选择通信方法提供参考。关键词 进程 进程通信 IPC Win32 API 1 进原创 2008-03-05 10:08:00 · 9647 阅读 · 2 评论 -
创建内存共享的几个步骤:
创建共享内存分以下几个步骤: 1.定义共享内存的结构体; 2.利用CreateFileMapping函数创建共享内存; 3.定义指向共享内存结构体的指针pShareMem,利用MapViewOfFile函数将刚刚创建的内存映射到定义指针pShareMem。 读写共享内存分以下几个步骤: 1.定义共享内存的结构体; 2.用OpenFileM原创 2008-03-05 10:08:00 · 2026 阅读 · 3 评论 -
利用内存读写函数和自定义消息实现进程间通信
原理:利用消息来传递共享内存的基地址,从而实现内存的共享 实现步骤:首先在进程A中要定义注册所要通信的消息:const UINT WM_nMEMMSG=::RegisterWindowMessage("memdata/欢迎您使用http://Blogmove.cn提供的"博客搬家"和"博文三窟"服务.原创 2008-03-05 10:08:00 · 407 阅读 · 0 评论 -
几个与内存映射文件有关的函数
首先介绍几个相关的函数:CreateFile()CreateFileMaping()MapViewOfFile()CreateFile函数创建或打开下列对象,并返回一个可以用来访问这些对象的句柄。 文件 pipes 邮槽 通信资源 磁盘驱动器(仅适用于windowsNT) 控制台 文件夹(仅用于打开)HANDLE CreateFile( LPCTSTRlpFileN原创 2008-03-05 10:08:00 · 446 阅读 · 0 评论 -
windows消息说明(转)
消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标。这个记录类型叫做TMsg,它在Windows单元中是这样声明的:typeT原创 2008-03-05 10:08:00 · 350 阅读 · 0 评论 -
ExDispid.h
#ifndef EXDISPID_H_//+-------------------------------------------------------------------------//// Microsoft Windows// Copyright 1995 - 1998 Microsoft Corporation. All Rights Reserved.//// File:原创 2008-03-05 10:09:00 · 1376 阅读 · 0 评论 -
跨平台编程(C++)
要建立一个c++跨平台的应用,亦难也易。 难在什么?所谓应用,自是实际应用,牵涉面很广。一般来说,至少有如下几个方面需要我们考虑: 0.语言及基础库 1.操作系统相关的 2.网络 3.数据库 4.界面 其它自然还有很多,如XML,加解密等等,这里先讨论前面列出的几项。 众所周原创 2008-03-05 10:09:00 · 665 阅读 · 0 评论