
C/C++
deargua
学下吧,软件工程师
展开
-
STL Deque Example
#include #include #include #include using namespace std;void main(){ deque dequ; for(int i = 0;i { dequ.push_back(i); dequ.push_front(i*3);//Deque 和 Queue区别 Deque可以从两边插入 } deque::iterator ipt;原创 2007-04-23 18:44:00 · 1086 阅读 · 0 评论 -
显-隐式转换问题
C++虽然是强类型语言,但是却还不如Java、C#那么足够的强类型,原因是允许的隐式转换太多从C语言继承下来的基本类型之间的隐式转换 T*指针到void*的隐式转换 non-explicit constructor 接受一个参数的隐式转换 从子类到基类的隐式转换(安全) 从const到non-const的同类型的隐式转换(安全)除开上面的五种隐式转换外,C++的编译器还非常聪明,当没法直接隐式转载 2007-05-07 11:11:00 · 1204 阅读 · 0 评论 -
关于表达式 运算溢出等问题
ALU的构造决定了它只能进行二元运算。那么一个复杂的表达式如何处理?只好按优先级和结合性一点一点地做。这就产生了“中间结果”,暂存在哪里?只有内存。内存里会有一些无名的、占一定空间的、短命的变量存在,它们稍纵即逝,由系统来管理。它们就叫做表达式的值。表达式的值的特点用于临时存放计算结果,如同变量;任何表达式都有值;表达式的值都没有名字;它们是短命的 —— 语句结束(;)即被自动释放;它们被转载 2007-05-07 11:16:00 · 3572 阅读 · 0 评论 -
再谈C指针
1.指针是一个保存对象地址的变量。这里要注意的是,指针跟地址概念的不同,指针是一种地址变量,通常也叫指针变量,统称指针。而地址则是地址变量的值。2.对一个一般类型的地址进行sizeof运算,结果是4个字节,而a[0]由于代表了一个数组,sizeof(a[0])的结果是整个数组的长度8x9xsizeof(int),并非4个字节。具有数组类型的地址跟数组名一样都是一个符号地址常量,因此它必定是一个转载 2007-05-07 11:25:00 · 1224 阅读 · 0 评论 -
指针以及指针做参数的问题
一‘指针的定义指针是一种地址变量,通常也叫指针变量,统称指针。而地址则是地址变量的值指针绝对不是地址,千万不要把意义给混淆了。指针的大小就是4个字节 32位 指针里存放的是地址 他本身放在符号表中。实际上地址就是一种基本数据类型,它应该跟整形,字符,浮点是一样的 。■指针只是存储地址类型的变量,它不是数据类型。 由于数组名是一个符号常量,因此它是一个右值, 而指针作为变量它是一个左值转载 2007-05-07 11:27:00 · 3031 阅读 · 0 评论 -
typedef用法的几点介绍
typedef char * pstr; int mystrcmp(const pstr, const pstr); 我们希望表达的是int mystrcmp( const char*, const char* )2个指向常量 char的指针可它被解释后的实际表达式变成了:int mystrcmp( char* const, char* const ) 2个指向char的常量指转载 2007-05-07 11:03:00 · 1034 阅读 · 0 评论 -
C中相关的错误处理
1.assert的使用对于内部使用的函数,通常可以用断言,而对于提供给外部使用的函数,最好使用错误处理。只有在生成DEBUG码时ASSERT()才起作用. 在生成Release码时编译器会跳过ASSERT(). 如果在程序开始加入代码:# define NDEBUG 则该程序中的assert函数全部失效,不必逐一删除。 断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为转载 2007-05-07 11:19:00 · 993 阅读 · 0 评论 -
C中断的应用
摘要:本文主要介绍C语言中中断服务程序的编写、安装和使用。由于硬中断服务程序的编写涉及到硬件端口读写操作,使得用户直接和硬件打交道,在程序设计过程中要用到的数据(如硬件端口地址等)比较多,这就使程序员和计算机的硬件设备间缺少一种“缓冲”的作用,况且,用汇编语言来直接对硬件编程要方便得多。本文仅对软中断程序的编写作个介绍。关键词:软中断、中断向量、中断向量表、TSR内存驻留、DOS重入、中断请求、段转载 2007-05-29 12:58:00 · 4200 阅读 · 0 评论 -
C链表 插入排序的实现
/********************************************************************* File Name : insert_sort.c ** Created : 2007/05/08 ** Author : S原创 2007-05-17 13:07:00 · 7084 阅读 · 0 评论 -
函数指针在表驱动方法中的应用举例
/*函数指针在表驱动方法中的应用 举例*/#include typedef struct { int id; void (*func)(void);}funcTable;void func1(){ printf("func1/n");}void func2(){ printf("func2/n");}void main(){ funcTable tab[2] = {{1,fu转载 2007-05-07 10:59:00 · 2718 阅读 · 0 评论 -
表驱动法介绍
函数指针的使用其实是很灵活的,它有很多技巧性很高的应用,在表驱动方法中的应用很典型,这里着重介绍一下。1 什么是表驱动方法表是几乎所有数据结构课本都要讨论的非常有用的数据结构。表驱动方法出于特定的目的来使用表,下面将对此进行讨论。程序员们经常谈到"表驱动"方法,但是课本中却从未提到过什么是"表驱动"方法。表驱动方法是一种使你可以在表中查找信息,而不必用很多的逻辑语句(if或Case)来把它们找出来转载 2007-05-07 10:50:00 · 11019 阅读 · 4 评论 -
const的几点介绍
可以节省空间,避免不必要的内存分配。 #define PI 3.14159 常量宏 const doulbe Pi=3.14159; 此时并未将Pi放入ROM中 const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define那样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。 编译器通转载 2007-04-23 18:55:00 · 907 阅读 · 0 评论 -
C中内存对齐的总结
按最大的union中的情况分配,然后再看对齐方式补齐。 本来,一般是不自己计算sizeof的,知道内存对齐会对sizeof有影响,所以从来不手算,而是代码里写上sizeof。今天又看到http://blog.vckbase.com/smileonce/archive/2005/08/08/10658.html,翻来了http://blog.vckbase.com/billdavid/arch转载 2007-04-23 19:00:00 · 1559 阅读 · 0 评论 -
指针相关
cout cout cout >;>;>;好像无论在"abc"前加几个&,输出都为abc没错,就是这样,因为 & 是取地址。取 10 遍还是取cout 这个很有意思。方括号 [] 运算符在 C 中实际上是一个“变址运算符”,[0] 表示取前面地址指向的第一个元素,元素的类型依耐于地址的类型。原创 2007-04-23 18:42:00 · 881 阅读 · 0 评论 -
错误处理相关
1.assert的使用对于内部使用的函数,通常可以用断言,而对于提供给外部使用的函数,最好使用错误处理。只有在生成DEBUG码时ASSERT()才起作用. 在生成Release码时编译器会跳过ASSERT(). 断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它用于调试目的: a原创 2007-04-23 18:50:00 · 1043 阅读 · 0 评论 -
指针的详细介绍
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针 的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身 所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: (1)int *ptr; (2)char *ptr; (3)int **ptr; (4)int (*ptr)[3];转载 2007-04-23 18:52:00 · 917 阅读 · 0 评论 -
volatile的介绍
volatile的本意是“易变的” 由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如:static int i=0;int main(void){...while (1){if (i) dosomething();}}/* Interrupt service routine. */void ISR_转载 2007-04-23 18:57:00 · 1028 阅读 · 0 评论 -
指针做参数 二级指针的详细分析
class data{public: int a; };void fun1(data* para)/**********************************///////////////////////////////////////////////////////{ /*当掉用时 data* data1 = NULL; fun1(data1); 本转载 2007-04-23 18:58:00 · 1362 阅读 · 0 评论 -
带符号数不能右移
这个太简单了 不过有时会不注意的哦右移一个带符号数在某些机器上会用符号位进行填充(“算数移位”)而在其他机器上会用0进行填充(“逻辑移位”)。转载 2007-04-24 19:19:00 · 1618 阅读 · 0 评论 -
C语言双向链表 快速排序
/********************************************************************* File Name : quick_sort.c ** Created : 2007/05/08原创 2007-05-17 13:06:00 · 15226 阅读 · 5 评论