
C/C++
文章平均质量分 55
njyzf
这个作者很懒,什么都没留下…
展开
-
VS2010中 C++创建DLL图解
一、DLL的创建创建项目: Win32->Win32项目,名称:MyDLL选择DLL (D) ->完成.1、新建头文件testdll.htestdll.h代码如下:#ifndef TestDll_H_#define TestDll_H_#ifdef MYLIBDLL#define MYLIBDLL extern "C" _declspec(dllim转载 2014-04-13 17:01:34 · 9737 阅读 · 0 评论 -
关键字const有什么含意?
const只是一个修饰符,不管怎么样a仍然是一个int型的变量const int a;int const a;const int *a;int * const a;int const * a const;本质:const在谁后面谁就不可修改,const在最前面则将其后移一位即可,二者等效 前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(原创 2012-10-24 18:57:19 · 1195 阅读 · 0 评论 -
sizeof不是函数,是操作符,是关键字
1、#include int main() { int i; i =10; printf("i : %d\n",i); printf("sizeof(i++) is: %d\n",sizeof(i++)); printf("i : %d\n",i); return0;}参考答案:如果你觉得输出分别是,10,4原创 2012-10-24 19:02:08 · 540 阅读 · 0 评论 -
传话游戏
描述Alice和Bob还有其他几位好朋友在一起玩传话游戏。这个游戏是这样进行的:首先,所有游戏者按顺序站成一排,Alice站第一位,Bob站最后一位。然后,Alice想一句话悄悄告诉第二位游戏者,第二位游戏者又悄悄地告诉第三位,第三位又告诉第四位……以此类推,直到倒数第二位告诉Bob。两位游戏者在传话中,不能让其他人听到,也不能使用肢体动作来解释。最后,Bob把他所听到的话告诉大家,Ali原创 2013-04-06 20:20:06 · 884 阅读 · 0 评论 -
踩方格--2013微软编程之美挑战赛之测试赛
时间限制: 1000ms 内存限制: 1024MB描述有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设:a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上;b. 走过的格子立即塌陷无法再走第二次;c. 只能向北、东、西三个方向走;请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。输入允许在方格上行原创 2013-04-05 20:51:38 · 2458 阅读 · 0 评论 -
你的变量究竟存储在什么地方?
你的变量究竟存储在什么地方?作者:杨小华 我相信大家都有过这样的经历,在面试过程中,考官通常会给你一道题目,然后问你某个变量存储在什么地方,在内存中是如何存储的等等一系列问题。不仅仅是在面试中,学校里面的考试也会碰到同样的问题。 如果你还不知道答案,请接着往下看。接下来,我们将在Linux操作系统上,以GCC编译器为例来讲解变量的存储。转载 2013-04-03 14:42:37 · 588 阅读 · 0 评论 -
关键字static的作用
这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。注意,只有在定义了变量后才能使用。如果变量定义在使用之后,要用extern 声原创 2012-10-24 17:59:37 · 26723 阅读 · 3 评论 -
一个c程序是如何启动和终止的
c程序总是从main函数开始执行。main函数的原型是int main(int argc,char *argv[]);其中,argc是命令行参数,argv是指向参数的各个指针所构成的数组。当内核执行C程序时(使用一个exec函数),在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址----这是由连接编辑器设置的,而连接编辑器则由C编译器(通原创 2013-04-01 14:00:18 · 1846 阅读 · 0 评论 -
关于构造函数的调用顺序
在说构造函数之前我们得先弄明白几个问题,首先是什么是类的构造函数,什么是类的成员对象,什么是基类,然后我们再来说构造函数的调用顺序。 1、 类的构造函数 构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰,这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一转载 2013-03-30 14:39:54 · 866 阅读 · 0 评论 -
C++ main()函数及其参数
main()函数及其参数C++标准允许主函数main()有或没有参数列表。 您能在主函数main()中使用一个或更多的参数。 如下是一些惯例:int main(int argc, char *argv[])第一个参数argc,指明有多少个参数将被传递给主函数main(),真正的参数以字符串数组(即第2个参数argv[])的形式来传递。每一个字符串均有自己意思。在这句法上面, 记住,转载 2013-03-29 22:21:37 · 483 阅读 · 0 评论 -
C++编程学习50个经典网站 强力推荐
C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。 1、http://snippets.dzone.com/tag/c/ --数以千计的有用的C语言源代码片段 2、http:转载 2013-03-29 19:27:56 · 824 阅读 · 0 评论 -
深入讨论C++的enum
呵呵,enum在实际中应用比较少,所以你会忽略它。但是,在这里,我告诉你,enum 和 struct、class一样,都是用户自定义类型。 对呀!enum是用户自定义类型,他有数据成员,还有成员函数!For example: enum e{a=1 , b=2 , c=4};那么: 001: enum e e1; //enum e不是对象,它是类型转载 2013-03-30 15:27:11 · 548 阅读 · 0 评论 -
析构函数不能抛出异常
1、构造函数可以抛出异常。2、c++标准指明析构函数不能、也不应该抛出异常。more effective c++关于第2点提出两点理由:1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源转载 2013-03-30 15:06:32 · 580 阅读 · 0 评论 -
函数对象 function object
函数对象(也称“算符”)是重载了“()”操作符的普通类对象. 尽管函数指针被广泛用于实现函数回调,但C++还提供了一个重要的实现回调函数的方法,那就是函数对象。函数对象(也称“算符”)是重载了“()”操作符的普通类对象。因此从语法上讲,函数对象与普通的函数行为类似。 用函数对象代替函数指针有几个优点,首先,因为对象可以在内部修改而不用改动外部接口,因此设计更灵活,更转载 2013-03-30 15:32:36 · 566 阅读 · 0 评论 -
一个简单的计算器模拟程序-2011腾讯笔试填空题
【说明】本程序是一个简单计算器模拟程序。对任意给定的正确四则运算表达式,程序计算其结果值并输出。表达式中运算分量为无正负号的整数,运算符为+ - * / ,圆括号按常规配对,表达式以字符“=”结束。函数getch()为获取表达式的一个合法字符,并将字符存入变量curch;函数指针数组func[]是为了统一加减乘除计算而设置的。(红色为需要补充的部分)#include原创 2013-03-25 15:04:40 · 1559 阅读 · 0 评论 -
c/c++中malloc/free和new/delete的区别
1、malloc与free是c/c++语言的标准库函数,new/delete是c++的运算符. 他们都可以申请动态内存和释放动态内存2、对于非内部数据类型(比如用户自定义的类)而言,只用malloc/free无法满足要求。因为类的对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器的控制权之内,不能够吧执行构造函数原创 2013-03-24 21:08:42 · 782 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.youkuaiyun.com/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2013-04-08 09:53:05 · 423 阅读 · 0 评论 -
C语言生成DLL供C#调用
编写C程序如下:#include "stdio.h"__declspec(dllexport) void MyFun(){ printf("this is a dll\n");} 保存,取名为My.C 运行 VS 命令提示,Cl /c 路径/My.c运行以后会生成 My.Obj,默认在vs安装文件夹的VC目录下再运行 link/dll转载 2012-10-24 19:09:46 · 2442 阅读 · 1 评论 -
c语言读写配置文件
/************************************************************************ T h e O p e n W i n d o w s P r o j e c t ------------------------------------------------------------------------转载 2014-05-15 11:35:49 · 2732 阅读 · 0 评论 -
C语言实现写入日志文件
C语言实现写入日志文件[cpp] view plaincopyprint?#include #include #include #include #ifdef WIN32 #include #else #include // linux下头文件 #endif #define FILE_MAX_SIZE (1024*1024) /* 获得当前时间字符串转载 2014-05-08 19:31:38 · 19882 阅读 · 0 评论 -
打印迷宫路径
bool doMaze(int m,int n, int matrix[][6], int x,int y){ if(!x&&!y) { cout<<"("<<x<<","<<y<<") "; return true; } bool flag=false; //go left if(y>0&&!matrix[x][y-1]) { matrix[x][y-1]=1;原创 2013-10-27 20:01:37 · 1106 阅读 · 0 评论 -
大数乘法
void multiply(){ char str1[1000],str2[1000]; cin>>str1>>str2; int len1 = strlen(str1); int len2 = strlen(str2); int len = len1 + len2 + 1; int *A = new int[len1]; int *B = new int[len2]; int原创 2013-10-27 19:10:04 · 745 阅读 · 0 评论 -
C++拷贝构造函数(深拷贝,浅拷贝)
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include iostream>using namespace std;class CExample {private: int a;pub转载 2013-03-29 16:54:15 · 389 阅读 · 0 评论 -
C++ 英语笔试题
Question 4: Which of the following statements correctly describe the code below in C++?#define language 437 //Line 1#if language #undef language //Li转载 2013-03-30 12:03:48 · 4029 阅读 · 1 评论 -
自定义线性表
#includeusing namespace std;templatestruct tcontainer{ virtual void push(const t&)=0; virtual void pop() = 0; virtual const t& begin() = 0; virtual const t& end() =0; virtual size_t size()原创 2013-04-28 16:05:13 · 831 阅读 · 0 评论 -
动态查找表之二叉排序树
二叉排序树(Binary Sort Tree)或者是一棵空树;或者是具有如下性质的二叉树:1)若左子树不空,则左子树上所有节点的值均小于它的根节点的值 2)若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值 3)它的左右子树也分别为二叉排序树。二叉排序树的查找int SearchBST(BiTree T,KeyType key, BiTree f,BiTree &p)原创 2013-04-18 21:59:22 · 1860 阅读 · 0 评论 -
c++ primier 第十章文本查询实例
#include#include#include#include#include#include#includeusing namespace std;class TextQuery{public: typedef std::vector::size_type line_no; void read_file(std::ifstream &is) { store_f原创 2013-04-14 21:16:45 · 803 阅读 · 0 评论 -
不用任何位操作,获得一个int变量的第九位
不用任何位操作(&、|、^、>、~),实现一个函数,得到一个int型数的第九位(从第一位开始计数)int check(){ union utype { int i; char c; }; utype u; u.i=1; return u.c==1;}int getbit(int val){ char *p=(char *)&val; p++; i原创 2013-04-11 14:41:47 · 738 阅读 · 0 评论 -
考数据在内存布局的小题目
在X86系统中,问下面程序输出什么?int check(){ union utype { inti; charc; }; utype u; u.i=1; returnu.c==1;} int main原创 2013-04-10 22:56:39 · 555 阅读 · 0 评论 -
详解程序的内存分配
内存分为代码区、全局数据区、堆区和栈区。堆一般存放动态数据,栈里一般存放局部成员。 关于堆栈和堆的概念[问题]C++中创建本地(或者说局域)变量是在堆栈(stack)中分配内存地址,而创建全局变量则是在堆(heap)中分配内存地址。我想知道什么是堆(heap)?为什么全局变量和本地变量在分配内存地址时要分别对待,堆和堆栈哪一个更有效率?[回答]在Window中执行的每一个应转载 2013-03-26 16:30:30 · 767 阅读 · 0 评论 -
C++ 异常处理 要点
1. throw出来的异常如果到最后也没有被catch,那么程序会abort2. 构造函数中如何有异常抛出,那么这个类的析构函数不会被调用(因为这个对象没有构造完成),所以必须在构造函数中catch这个异常,然后释放之前所有已经分配的空间3. 析构函数中的异常不能传递到析构函数外, 因为1. 之后的代码不会被执行(可能造成内存泄漏) 2. 有可能是因为一个异常处理进入的析构函数,如转载 2013-03-30 15:13:20 · 394 阅读 · 0 评论 -
C++ new操作符详解
一、问题描述之前腾讯笔试的时候有个题,在指定的内存空间中构造对象,当时不会。昨天汤森路透笔试的时候也有几个关于new原型的题目。之前就知道会用new操作符,但是没有考虑过这些问题,现在总结一下,方便以后查阅。二、new操作符的概念我们通常讲的new是指的是new operator,其实还有另外两个概念,operator new 和 placement new转载 2013-03-29 10:50:45 · 830 阅读 · 0 评论 -
关于数组
一、数组类型的变量有三个重要的限制:1、数组长度固定不变;2、在编译时必须知道其长度;3、数组只在定义它的块语句内存在二、可使用在数组长度后面的一对空圆括号,对数组元素做值初始化:int *p=new int [10]();圆括号要求编译器对数组做值初始化,在本例中即把数组元素都设置为0。对于动态数组,其元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供原创 2012-10-24 19:11:48 · 376 阅读 · 0 评论 -
C++中 指针和引用的比较
虽然使用引用和指针都可间接访问另一个值,但他们之间有两个重要的区别。第一:引用总是指向某个对象,定义引用时没有初始化是错误的第二:赋值行为有差异:给引用赋值修改的是该引用所关联的对象的值,而不是使引用与另一个对象关联。引用已经初始化,就始终指向同一个特定对象(这就是为什么引用在定义时必须初始化的原因)。而当给指针重新赋值时,该指针就指向了另外一个对象。原创 2012-10-24 19:10:59 · 410 阅读 · 0 评论 -
windows网络编程示例
vc++ 6.0下运行代码server端:#include #include #include #pragma comment(lib,"ws2_32.lib")const int SERVER_PORT = 3333;const int MAX_ACCEPT = 10;void server(){ int sock_fd; int client_f原创 2012-10-24 19:08:39 · 896 阅读 · 0 评论 -
使表具有动态增长的能力
int current_element = 0;int total_element = 128;char * dynamic = malloc (total_element);void add_element(char c){if(current_element==total_element){total_element*=2;newbase = (char*)原创 2012-10-24 19:07:29 · 349 阅读 · 0 评论 -
使用指针从函数返回一个数组
无法直接从函数返回一个数组。但是,可以让函数返回一个纸箱任何数据结构的指针,当然也可以是一个纸箱数组的指针。记住,声明必须在使用之前。一个声明的例子是:int (*paf())[20];这里,paf是一个函数,他返回一个指向包含20个int 元素的数组的指针。它的定义可能如下:int (*paf())[20]{int (*pear)[20];pear = calloc(2原创 2012-10-24 19:06:41 · 726 阅读 · 0 评论 -
数组和指针可交换性的总结
1、用a[i]这样的形式对数组进行访问总是被编译器“改写”或解释为像*(a+1)这样的指针访问。2、指针始终就是指针。它绝不可以改写成数组。你可以用下标形式访问指针,一般都是指针作为函数参数时,而且你知道实际传递给函数的是一个数组。3、在特定的上下文中,也就是它作为函数的参数时(也只有这样情况),一个数组的声明可以看做时一个指针。作为函数参数的数组(就是在一个函数调用中)始终会被编译器修改原创 2012-10-24 19:05:44 · 1257 阅读 · 0 评论 -
qsort的使用
void qsort(void base,size_t nel,size_t width,int(*compar)(const void*,const void *));//函数声明 int intcompare(const int *i,const int *j){return (*i-*j);}qsort(a,10,sizeof(int),(int(*)(const原创 2012-10-24 19:04:59 · 419 阅读 · 0 评论 -
分析C语言的声明
1、char *(* c[10]) (int **p);表示只想有10个元素的函数指针数组,所指向的函数接受一个指向整型指针的指针作为形参,并返回一个指向char类型的指针 char * const*(*next)();//此处的红色*号是否可省?表示一个函数调用语句,该函数返回一个指向char型的只读指针 2、宏#define 与typedef的区别1)可以用其他类型原创 2012-10-24 19:03:23 · 392 阅读 · 0 评论