C++数据结构学习:在链表中链入对象
似乎你也注意到了,不管怎么定义,好像一个链表中的对象都是同一类型的。而实际上,这也是必须的,否则,返回节点中的数据这样的函数的返回值的类型是什么呢?但是,人的要求是无止境的……(省略本人感慨若干百字)。把不同的对象链在一个链表中的目的是为了方便使用,现在一定记住这个原则,后面的讨论都是基于这个原则的,否则,我们就是技术狂人了——偏偏实现一些看起来不可能的事情。 达到这个目标的原理其实很简单,只要把不同类型的对象变成同样的类型就可以了。看下面的结构定义: struct Mobject { void *p;...
C/C++中利用空指针简化代码,提高效率
这里的写法,可以避免使用 for 循环,减少栈空间内存的使用和减少运行时的计算开销! #include iostream #include string using namespace std; void print_char(char* array[]);//函数原形声明 void main(void) { char* test[]={"abc","cde","fgh",NULL};//这里添加一个NULL,表示不指向任何地址,值为0 print_char(test); cin.get(); } vo...
字符串常量的不相等性及字符串的Copy
#include iostream void main(void) { if("test"=="test") { cout"相等"; } else { cout"不相等"; } } 上面的代码我们测试两个内容为test的字符串常量是否相等,按照常理,应该是相等的,这些在一些过程式语言中会得到相等的结论,但在c/c++却不是这样。 为什么呢? 答案在这里:因为字符串常量存储在计算机内存中,两个字符串常量的地址均不相同,所以这样的比较自然就不会得到我们所需要的结果,如果要进行是否相等的比较应该使用strcm...
C/C++中字符指针数组及指向指针的指针的含义
就指向指针的指针,很早以前在说指针的时候说过,但后来发现很多人还是比较难以理解,这一次我们再次仔细说一说指向指针的指针。 先看下面的代码,注意看代码中的注解: #include iostream #include string using namespace std; void print_char(char* array[],int len);//函数原形声明 void main(void) { //-----------------------------段1--------------------...
C++中堆内存(heap)的概念和操作方法
堆内存是什么呢? 我们知道在c/c++中定义的数组大小必需要事先定义好,他们通常是分配在静态内存空间或者是在栈内存空间内的,但是在实际工作中,我们有时候却需要动态的为数组分配大小,在这里c库中的malloc.h头文件中的malloc()函数就为您解决了问题(bc或者是在老的标准中是alloc.h),它的函数原形是void* malloc(size_t size),在动态开辟的内存中,在使用完后我们要使用free()函数来释放动态开辟的内存空间。 下面我们来看一个完整的例子: #include iostr...
新手入门:C/C++中数组和指针类型的关系
对于数组和多维数组的内容这里就不再讨论了,前面的教程有过说明,这里主要讲述的数组和指针类型的关系,通过对他们之间关系的了解可以更加深入的掌握数组和指针特性的知识! 一个整数类型数组如下进行定义: int a[]={1,2,3,4}; 如果简单写成: a;//数组的标识符名称 这将代表的是数组第一个元素的内存地址,a;就相当于a[0],它的类型是数组元素类型的指针,在这个例子中它的类型就是int* 如果我们想访问第二个元素的地址我们可以写成如下的两种方式: a[1]; a+1//注意这里的表示就是将a数组...
新手入门:关于C++中的内联函数
在c++中,为了解决一些频繁调用的小函数大量消耗栈空间或者是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数。 可能说到这里,很多人还不明白什么是栈空间,其实栈空间就是指放置程序的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的,如果频繁大量的使用就会造成因栈空间不足所造成的程序出错的问题,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。 下面我们来看一个例子: #include iostream #include string using namespace std;...
新手入门:C++中的函数重载
函数重载是用来描述同名函数具有相同或者相似功能,但数据类型或者是参数不同的函数管理操作的称呼。 我们来举一个实际应用中的例子来说明问题:我们要进行两种不同数据类型的和操作为了实现它,在c语言中我们就要写两个不同名称的涵数来进行区分例如:int testa(int a,int b)和float testb(float a,floatb),这样字是没有问题,但是总有一点不好,这么两个具备极其相似操作函数我们却起两个不同的名字,这样子不是很好管理,所以c++为了方便程序员编写程序特别引入了函数重载的概念来解决...
游戏开发新手入门指南
我经常被问及:一个具有很少甚至没有编程经验的人要如何开始游戏制作。直到目前为止,我总是尽我所能一个一个解答。然而,问题的数量已经增长到了一个难以处理的水平,于是,我便决定把所有的建议汇总在一篇文章里作为参考提供给人们。 这篇文章主要面向那些想开发自己的游戏,但仅有一点点或没有半点编程经验的人们。实际上,我也假定读者根本没有任何的编程知识。我将把重点放在游戏开发的编程和设计方面,而不是艺术方面。我也不准备对游戏行业进行论述(因为这个话题的资料太多了),但是,我会带你浏览一下在制作游戏之前需要做的一些事情。...
新手入门:C++下的引用类型
引用类型也称别名,它是个很有趣的东西。在c++ 下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。 引用对象采用类型名加上符号和名称的方式进行定义。例如:(int test;),这里我们就定义了一个int类型的名为test 的引用,但是int test;这样的方式是不能够被编译成功的,因为引用的定义必须同时给应用进行赋值操作,这里的赋值并不是说把变量的值传递给引用,而是把引用指向变量,写成这样就对了:(...
谈跨平台C++动态连接库的实现
我对与solaris ,hp ,windows这三个平台的动态库的实现,进行了探索,对于soloaris,hp等Unix平台来讲,主要是make文件的制作,而Windows下还需要对类头进行修饰. 本列主要实现了一个动态库和一个调用动态库的运行程序,动态库包括mytime.h ,mytime.cpp , 在windows下还需要dllt1.cpp ,这个包含动态库的DllMain入口函数, StdAfx.cpp ,stdAfx.h是与预编译相关的文件. 运行程序包括dy.cpp 包括对动态库的调用。 下面...
如何用C++编程获得某台机器的IP地址
对于这个古老的问题,VC知识库的精华区以及以往的在线杂志中都有详尽不一的描述。本文提供的方法是一个比较完整的解决方案,并附有详细的实现细节。希望大家对这个问题有彻底的认识。其实,如果你熟悉 Windows 的Sockets API,并了解一些底层的Winsock知识。那么要获得某台机器的IP地址并不是什么难事。一台机器可以装多块网卡,因此它就可能有多个IP地址。目前很多发烧友的PC机都装有多块网卡。其中一块网卡与调制解调器(MODEM)或者ADSL适配器相连,另一块与家里的局域网(LAN)相连。对于有宽...