随笔分类 -  C/C++

C/C++函数调用过程分析
摘要:这里以一个简单的C语言代码为例,来分析函数调用过程代码: 1 #include <stdio.h> 2 3 int func(int param1 ,int param2,int param3) 4 { 5 int var1 = param1; 6 int var2 = param2; 7 int var3 = param3; 8 9 printf("var1=%d,var2=%d,var3=%d",var1,var2,var3);10 return var1;11 }12 13 int main(int ... 阅读全文

posted @ 2012-07-20 15:11 as_ 阅读(24688) 评论(0) 推荐(2)

C/C++中volatile关键字
摘要:(转 有修改,并且重新整理了格式)1. volatile关键字C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler that an object may change its value in ways not specified by the language so that aggressiv 阅读全文

posted @ 2012-07-19 14:44 as_ 阅读(1266) 评论(0) 推荐(0)

C/C++中static关键字作用总结
摘要:1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可)当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。举例来说明。同时编译两个源文件,一个是a.c,另一个是main.c。//a.cchar a = 'A'; // global variablevoid msg(){ printf("Hello\n");}//main.cint main(){ extern char a; // extern variable must be declared before use ... 阅读全文

posted @ 2012-07-19 10:42 as_ 阅读(50226) 评论(4) 推荐(10)

C++虚函数表机制解析(转)
摘要:C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图. 阅读全文

posted @ 2012-07-17 14:12 as_ 阅读(993) 评论(0) 推荐(0)

多态和C++多态的实现(汇总)
摘要:多态概念:多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOD)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。C 阅读全文

posted @ 2012-07-16 18:54 as_ 阅读(4105) 评论(1) 推荐(0)

new/delete 和malloc/free 的区别一般汇总
摘要:一、基本概念 malloc/free:1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。2.内存操作: malloc函数的参数是接受需要分配的内存字节数,如果内存能够满足请求量,那么将会返回:指向被分配的内存块起始位置 free函数释放的是指针指向的内存(不是释放的指针本身,不会删除指针本身),其中指针 阅读全文

posted @ 2012-07-16 16:00 as_ 阅读(17930) 评论(2) 推荐(6)

执行程序的内存分布总结
摘要:以下内容为各方资料汇总 所以逻辑顺序不大清晰一般认为在c中分为这几个存储区: 1. 栈--有编译器自动分配释放 2. 堆--一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3. 全局区(静态区)-- 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束释放。 4. 另外还有一个专门放常量的地方。程序结束释放。 在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。在所有函数体外定义的是全局量,加了stat... 阅读全文

posted @ 2012-07-14 19:14 as_ 阅读(1398) 评论(0) 推荐(0)

C语言中strcpy,strcmp,strlen,strcat函数原型
摘要:#include #include char *strcpy(char *strDest, const char *strSrc) { char *address=strDest; assert((strDest!=NULL) && (strSrc!=NULL)); while(*strSrc!='\0') { *strDest++=*strSr... 阅读全文

posted @ 2012-07-12 20:13 as_ 阅读(4743) 评论(3) 推荐(0)

strcpy,sprintf,memcpy的区别
摘要:这些函数的区别在于 实现功能 以及 操作对象 不同。strcpy 函数操作的对象是 字符串 ,完成 从 源字符串 到 目的字符串 的 拷贝 功能。snprintf 函数操作的对象 不限于字符串 :虽然目的对象是字符串,但是源对象可以是字符串、也可以是任意基本类型的数据。这个函数主要用来实现 (字符串或基本数据类型)向 字符串 的转换 功能。如果源对象是字符串,并且指定 %s 格式符,也可实现字符串拷贝功能。memcpy 函数顾名思义就是 内存拷贝 ,实现 将一个 内存块 的内容复制到另一个 内存块 这一功能。内存块由其首地址以及长度确定。程序中出现的实体对象,不论是什么类型,其最终表... 阅读全文

posted @ 2012-07-12 19:23 as_ 阅读(6515) 评论(0) 推荐(0)

const!指针!
摘要:const的实现const仅对编译器有效,严格来说,const不是“不可以修改”,而是告知编译器:我的变量不应该被修改,如果编译器发现程序企图修改这个变量,就会报错。有些情况,const变量有可能被编译器以外的东西修改,例如硬件中断等等。1.指向const对象的指针 可以这样理解指向const对象的指针:指向const对象的指针就是一个指针,不能通过它来修改它所指向的对象的值 声明方法:const int *p; const对象在初始化是不允许对其值进行修改的,因此,我们不能用一个普通指针指向一个const对象 下面的赋值会引起错误 const int i =1;int *p = &i 阅读全文

posted @ 2012-07-12 14:39 as_ 阅读(851) 评论(0) 推荐(1)

导航