C/C++
挨踢的小胖
这个作者很懒,什么都没留下…
展开
-
变量声明和定义的区别
我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下: 变量的声明有两种情况: (1) 一种是需要建立存储空间的(定义、声明)。例如:int a在声明的时候就已经建立了存储空间。 (2) 另一种是不需要建立存储空间的(声明)。例如:extern i转载 2013-04-19 18:00:01 · 597 阅读 · 0 评论 -
C++多态性的问题
多态是指同样的消息被不同的类型的对象接受时导致的完全不同的行为,是对类的特定成员的再抽象,c++支持的多态有多种类型,重载和虚函数是其中的主要方式。 本文描述了C++中的各种多态性。重点阐述了面向对象的动态多态和基于模板的静态多态,并初步探讨了两种技术的结合使用。 关键词: 多态 继承 虚函数 模板 宏 函数重载 泛型编程 泛型模式转载 2013-05-04 23:00:02 · 811 阅读 · 0 评论 -
完全二叉树的顺序存储
二叉树的顺序存储关键在于理清父子节点与下标之间的关系。#define MAXSIZE 100template class ArrayTree{public: ArrayTree() { count = 0; } void Init(int data[],int len)//构造完全二叉树。 { if (len > MAXSIZE) {原创 2013-04-20 20:05:06 · 1376 阅读 · 0 评论 -
主函数main()
return是C++预定义的语句,它提供了种植函数执行的一种放大。当return语句提供了一个值时,这个值就成为函数的返回值. 说到return,有必要提及主函数的定义,下面是从网络上找到的资料,好好消化吧,对了解主函数中返回值的理解有很大的帮助. 很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++转载 2013-04-20 00:32:42 · 1196 阅读 · 0 评论 -
extern的用法
1. extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a.c中声明extern int v,还取决于变量v本身是能够被引用到的。这涉及到c语言的另外一个话题--变量的作用域。能够转载 2013-04-19 17:59:24 · 682 阅读 · 0 评论 -
__VA_ARGS__以及##
__VA_ARGS__使用__VA_ARGS__,我们可以定义带可变参数的宏,举个例子:#define MY_PRINTF(…) printf(__VA_ARGS__)这样我们写MY_PRINTF("hello, %s”, "world");就等价于printf("hello, %s”, "world");宏的"##"符号"##"符号的作用是在可变参数的个数为0时,转载 2013-04-19 18:04:15 · 645 阅读 · 0 评论 -
C语言中volatile的用法
一:告诉compiler不能做任何优化 比如要往某一地址送两指令: int *ip =...; //设备地址 *ip = 1; //第一个指令 *ip = 2; //第二个指令 以上程序compiler可能做优化而成: int *ip = ...; *ip = 2转载 2013-04-19 18:02:24 · 533 阅读 · 0 评论 -
预处理指令
预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。下面是部分预处理指令: 指令 用途 # 空指令,无任何效果 #incl转载 2013-04-19 18:01:31 · 509 阅读 · 0 评论 -
static的用法
一、c程序存储空间布局C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增转载 2013-04-19 18:00:50 · 479 阅读 · 0 评论 -
高级宏定义"\","#","#@"和"##"
"\","#","#@"和"##" 在用#define 定义时 , 斜杠("\")是用来续行的,"#"用来把参数转换成字符串,是给参数加上双引号。"##"则用来连接前后两个参数,把它们变成一个字符串,"#@"是给参数加上单引号。下面的例子会使您很容易理解。#define Conn(x,y) x##y#define ToChar(a) #@a #转载 2013-04-19 18:03:06 · 1822 阅读 · 0 评论 -
函数指针
函数指针 是一个指向函数的指针,可以如下定义: int (*pfunc)(int, int); 对这条语句的解释是: 先解释(*pfunc),所以pfunc首先是一个指针; 再解释(int, int),pfunc指向一个函数,该函数的参数有两个,都是整形; 最后是返回值。 因此,如果定义了一个函数int max(int a,转载 2013-04-19 18:03:40 · 917 阅读 · 0 评论 -
头文件的作用
头文件中一般用于写类或函数的声明。 比如有一个函数(或类)在多个程序文件中都要用到,你就得在这么多文件中都写上它的声明,一旦这个函数的原型发生了变化,你就得更新所有的用到它的文件中的声明,这是 很麻烦而且容易出错的。这就应该用头文件,把声明写在头文件中,用到这个函数(或类)的文件中就不用一一写它的声明了,只要包含这个头文件就可以了,要修改也很方便。 对同一对象、函数、类等所以转载 2013-04-19 18:01:55 · 2935 阅读 · 0 评论 -
BSS段、数据段、代码段、堆与栈
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。代码段:代码段(code segment/text segment)通常是指用转载 2013-09-29 16:11:15 · 584 阅读 · 0 评论