C
文章平均质量分 56
rongwenbin
这个作者很懒,什么都没留下…
展开
-
静态库
静态库程序编译一般需经预处理、编译、汇编和 链接几个步骤。在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中。这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。静态库和动态库是两种共享程序代码的方式,它们的区别是:静态库在程序的链接阶段被复原创 2013-08-09 17:32:16 · 457 阅读 · 0 评论 -
getopt的用法与optarg
getopt的用法与optarggetopt被用来解析命令行选项参数。就不用自己写东东处理argv了。#include extern char*optarg; //选项的参数指针 extern int optind, //下一次调用getopt的时,从optind存储的位置处重新开始检查选项。 extern intopterr原创 2013-08-09 17:34:25 · 579 阅读 · 0 评论 -
关于sizeof(string)
关于sizeof(string) 不同的编译器的sizeof(string)是不同的。 vs 2008算出来的sizeof(string)是32,vc6.0算出来的是16.有些书上是4. 推测是不同的版本中,string这个模板类实现的机理不尽相同造成的。 在VC上运行得到的结果是16,而不是程序员面试宝典里指出的4,原因是在vc中,string不原创 2013-08-09 17:33:13 · 675 阅读 · 0 评论 -
strlen(char*)与sizeof()的区别
2012-08-13 10:21strlen(char*)与sizeof()的区别与sizeof()的区别 strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。 char aa[10];cout//结果是不定的 char aa[10]={原创 2013-08-09 17:33:07 · 1201 阅读 · 0 评论 -
结构体字节对齐
结构体字节对齐(1)什么是字节对齐 一个变量占用 n个字节,则该变量的起始地址必须能够被 n 整除,即: 存放起始地址 % n = 0, 对于结构体而言,这个 n取其成员种的数据类型占空间的值最大的那个。(2)为什么要字节对齐 内存空间是按照字节来划分的,从理论上说对内存空间的访问可以从任何地址开始,但是在实际上不同架构的CPU为了提高访问内存的速度,就规定了对原创 2013-08-09 17:33:05 · 525 阅读 · 0 评论 -
extern“c”
extern“c”简介 extern "C"包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。含义 (1) 被extern 限定的函数或变量是extern类型的: a. extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int原创 2013-08-09 17:33:03 · 427 阅读 · 0 评论 -
回调函数WindowProc函数
LRESULT 的定义typedef LONG_PTR LRESULTLONG_PTR 的定义#if defined(_WIN64)typedef __int64 LONG_PTR;#elsetypedef long LONG_PTR;CALLBACK的定义#define CALLBACK __stdcall于是乎,LRESULT CALLBACK WindowProc(.原创 2013-08-09 17:32:09 · 1708 阅读 · 0 评论 -
回调函数的例子
#include stdio.h>typedef int (*CallBackFun)(char *p); int Afun(char *p) { printf("Afun 回调打印出字符%s!\n", p); return 0;}int Cfun(char *p) { printf("Cfun 回调打印:%s, Nice to meet y原创 2013-08-09 17:32:07 · 529 阅读 · 0 评论 -
一个byte怎么转成网络字节序
单字节不用转原创 2013-08-09 17:34:27 · 533 阅读 · 0 评论 -
a和b进行交换而不使用任何中间变量
a=a^bb=a^ba=a^b原创 2013-08-09 17:33:01 · 505 阅读 · 0 评论 -
迭代器是什么(转)
迭代器是什么 在学习c++STL的时候,整天碰到迭代器,也整天用,但是,到底它是个什么东西,很多人没有一个认识。这里我通过几个小的DEMO,来看看迭代器。首先我实现了一个十分简陋的vector类: [cpp]template class T> class vector { private: T* pbegin; int n; /转载 2013-08-09 17:33:33 · 707 阅读 · 0 评论 -
c# struct和class的区别
今天做了个题。是这样的: class Program { static void Main(string[] args) { Student stu1 = new Student(18, "小芳"); Student stu2 = new Student(24, "小刚"); s转载 2013-08-09 17:32:43 · 581 阅读 · 0 评论 -
【转】字符串数组初始化0 与memset 0 效率的分析
【转】字符串数组初始化0 与memset 0 效率的分析最近要分析程序的性能,所以上网查了查资料,的处理下面结论:#defineARRAYSIZE 2048voidmain() { chararrayA[ARRAYSIZE]={0}; chararrayB[ARRAYSIZE]; memset(array,0, ARRAYSIZE);}char a转载 2013-08-09 17:32:11 · 1190 阅读 · 1 评论 -
char a=256
char a=256;int i=a; 在c/c++中,一个char及字符型变量占一个字节的内存空间,表示范围是-128到127.你令chara=256就造成了数据的溢出,于是转成int型就变成0了原创 2013-08-09 17:33:27 · 7170 阅读 · 0 评论 -
C++ previous declaration of...wi…
在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,这是因为C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern“C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。原创 2013-08-09 17:32:39 · 1339 阅读 · 0 评论 -
String类的实现:三大复制控制函数
已知类String的原型为:class String{public: String(constchar *str = NULL);// 普通构造函数 String(const String&other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operate =(const String&原创 2013-08-09 17:33:24 · 780 阅读 · 0 评论 -
C/C++class和struct有什么区别?
C/C++面试题:class和struct有什么区别?考点:class和struct的区别出现频率:☆☆☆☆解析:这里有两种情况下的区别。(1)C的struct与C++的class的区别。(2)C++中的struct和class的区别。在第一种情况下,struct与class有着非常明显的区别。C是一种过程化的语言,struct只是作为一种复杂数据类型定义,struct中只能定义成员原创 2013-08-09 17:32:48 · 574 阅读 · 0 评论 -
C/C++误区一:void main()
很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的。C/C++ 中从来没有定义过voidmain( ) .C++之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着 The definition void main( ){ } is not and never has been C++, nor has it even been C.(原创 2013-08-09 17:32:52 · 616 阅读 · 0 评论 -
pragma pack
1,复杂类型中各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个类型的地址相同;2,每个成员分别对齐,即每个成员按自己的方式对齐,并最小化长度;规则就是每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数中较小的一个对齐;3,结构、联合或者类的数据成员,第一个放在偏移为0的地方;以后每个数据成员的对齐,按照#pragmapack指定的数值和这个数据成员自身长度原创 2013-08-09 17:33:09 · 452 阅读 · 0 评论 -
对字符数组中某两个字节赋整数值
char buf[40]={0}*(short *) &Buf[18]=12;原创 2013-08-09 17:34:10 · 617 阅读 · 0 评论 -
内存数据的十六进制Print
在程序的调试过程中,经常需要输出各种数据,正常情况下使用printf和cout即可实现数据输出。然而在输出二进制数据时,printf和out却有点无能为力。那么如何比较二进制数据是否正确呢?方案一:文件输出。文件可以输入任何数据,但是需要在程序之外比较文件,这对于少量数据并不划算。方案二:实现自定义的十六进制输出函数。当然,也可是八进制,一般而言十六进制更易看懂(习惯)。下面给出一个最近实现原创 2013-08-09 17:34:03 · 713 阅读 · 0 评论 -
对象初始及赋值
String a("aaa");//初始 构造函数String b("bbb");//初始 构造函数String f="eee";//初始 用了String类里面重载过的"="操作符 String c=a;//初始 拷贝构造函数String d(a);//初始 拷贝构造函数c=b;//赋值 赋值构造函数 String e=new String("eee");//动态建立 S原创 2013-08-09 17:33:11 · 555 阅读 · 0 评论 -
c语言的自动类型转换
c语言的自动类型转换自动转换遵循以下规则:1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。2) 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。a.若两种类型的字节数不同,转换成字节数高的类型。b.若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型原创 2013-08-09 17:32:59 · 492 阅读 · 0 评论 -
探讨C++中对象的“浅拷贝”与“深拷贝…
拷贝构造函数是为了类像内置类型那样能够进行复制,比如int a=0;int b =a;默认复制构造函数一本就是浅拷贝,深拷贝和浅拷贝时针对类数据成员有指针成员或引用成员,比如一个类中有一个指针成员int *p,浅拷贝是指在复制指针时,直接复制指针,即两个类的指针p都指向一个内存单元,而深拷贝是指将一个类的指针所指向的内容复制给另一个类,这样,两个类的指针成员指向两个不同的内存单元。原创 2013-08-09 17:32:56 · 531 阅读 · 0 评论 -
常对象成员总结
1、常数据成员只能通过构造函数的参数初始化表进行初始化,不论任何方式都不可以改变值。如果要在类中初始,必须加上static,如 static const int i=1; 2、常成员函数const在函数名和括号之后。目的是为了只能引用本类中数据成员,不允许修改它们。(不论是const还是非const成员。)原创 2013-08-09 17:32:50 · 551 阅读 · 0 评论 -
内存类型
1、静态存储区编译时已经分配好。全局、static。 2、堆栈(stack)局部变量、形参。 3、堆(heap)malloc、new动态分配。原创 2013-08-09 17:32:46 · 528 阅读 · 0 评论 -
cin.ignore()的用法
cin.ignore(a,ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin.ignore()函数执行终止;否则,它继续等待。它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。比如可以这么用:cin.ignore(1024,'\n'原创 2013-08-09 17:32:41 · 962 阅读 · 0 评论 -
c&c++容易混淆的概念
指针数组每一个元素相当于一个指针变量,它的值都是地址。char *[] name={"BASIC","C+++","PHP","JAVA"};int main(int argc,char * argv[])atoi(argv[1])数组指针指向一个包含m个元素的一维数组。int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}int(*p)[4];原创 2013-08-09 17:32:21 · 561 阅读 · 0 评论 -
用extern定义全局变量
用extern定义全局变量 1.extern的作用 extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要原创 2013-08-09 17:32:19 · 681 阅读 · 0 评论 -
为什么这个程序中sizeof的结果是4…
为什么这个程序中sizeof的结果是4?#include#includeusing namespace std;class base{public: base(){cout ~base(){cout virtualvoidf(int){cout virtualvoidf(double){cout virtualvoid g(i原创 2013-08-09 17:33:16 · 1346 阅读 · 0 评论 -
指针、引用、常量的初始
int &i;//引用必须声明同时初始化int *pi;*pi=5;//未指向的指针不能赋值const int j;//必须立刻初始化 int *pint=2000;//不能用整数给指针赋初始值原创 2013-08-09 17:33:18 · 636 阅读 · 0 评论 -
STL中的erase函数跟remove函数有什…
vector 中erase是真正删除了元素, 迭代器访问不到了。algorithm中的remove只是简单的把要remove的元素移到了容器最后面,然后其余元素前移,迭代器还是可以访问到的。因为algorithm通过迭代器操作,不知道容器的内部结构,所以无法做到真正删除。remove并不真正从容器中删除元素(容器大小并未改变),而是将每一个与value不相等的元素轮番赋值给first之后的空原创 2013-08-09 17:34:01 · 897 阅读 · 0 评论 -
C/C++学习笔记
【运算】x*=y+8;//x=x*(y+8)a-=10;//a=a-10c语言要求变量定义应该放在所有执行语句之前,C++放松限制。【结构】struct建议先定义类型后定义变量的方式。在定义结构体变量时,C语言要求加struct,C++则不必。【类】用sizeof时,类中的static变量是不计算在内的。不能在类中对数据成员进行初始化。常数据成员只能通过构造函数的原创 2013-08-09 17:33:54 · 490 阅读 · 0 评论 -
singleton模式
#include using namespace std;class Singleton{public: static Singleton* Instance(); voidsetValue(int val) { value = val; } intgetValue() { return value; }protected: Singleton(原创 2013-08-09 17:33:46 · 611 阅读 · 0 评论 -
迭代器有什么用,意义何在?
迭代器就是把不同的数据结构 "相同功能 "的函数装到一个名字相同的函数里,这样的话你在写算法的时候就可以不管你要操作的数据结构的逻辑结构了。比如不管是链表,数组还是别的什么,统一都用迭代器进行访问的话可能都是 Next()表示下一个元素 Pre()表示上一个元素等等 。其实意思就是,不管你用的是链表,2叉树、3叉树、N叉树,还是向量。迭代器都可以让你从first开始,使用next,到原创 2013-08-09 17:33:35 · 7882 阅读 · 3 评论 -
string类的方法
string类的方法string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;strings2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常str原创 2013-08-09 17:33:31 · 458 阅读 · 0 评论 -
怎么定义一个int[n]数组且初始化
先定义int n = 5;在定义int a[n] = {0};编译怎么不通过啊? n必须为常量如果想实现你说的,应该用宏。#define n 5int a[n]={0};这样就可以了。你如果非要n的。可以用动态申请长度为n的数组,int n=5;int *a=new int[n];然后对数组赋值。a[0]=0; 补充下:如果你写的C++,可以用co原创 2013-08-09 17:33:29 · 6309 阅读 · 1 评论 -
出现频率最高的笔试题strcpy写法
出现频率最高的笔试题strcpy写法题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。解说: 1.strcpy的实现代码 char * strcpy(char * strDest,const ch原创 2013-08-09 17:33:22 · 515 阅读 · 0 评论 -
关于指针参数的内存传递副本
一个错误的例子:void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);}void Test(void){ char *str = NULL; GetMemory(str, 100); // str 仍然为 NULL strcpy(str, "hello"); // 运行错误}原创 2013-08-09 17:33:20 · 894 阅读 · 0 评论 -
C语言中volatile关键字的作用
一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法转载 2013-12-05 10:57:24 · 640 阅读 · 0 评论