VCer代码 VCer开源 VCer文章 VCer工具 VCer知道 VCer词典 VCer读书 VCer论坛   站点首页 我要张贴 控制面板
VCer代码 VCer开源 VCer文章 VCer工具 VCer知道 VCer词典 VCer读书 VCer论坛   站点首页 我要张贴 控制面板

目前位置: VCer资源中心 >>> VCer文章
子级分类: 软件工程 C++/MFC基础 Windows界面 网络与通信 图形图象处理 系统通信 数据库 文件系统 硬件/系统调用 开发工具 组件技术 其它技术
我来转发一篇文章!>>>


高质量C++/C编程指南
 
比较经典的一本总结了c/c++最基本最重要,也是一些软件开发公司笔试的依据。本文转载自IT网it求职笔试真题库网。
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1097次,回复0
堆和栈的区别
 
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放5、程序代码区—存放函数体的二进制代码。二、例子程序 这是一个前辈写的,非常详细 //main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc"; 栈 char *p2; 栈 char *p3 = "123456"; 123456\0在常量区,p3在栈上。 static int c =0; 全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); 分配得来得10和20字节的区域就在堆区。 strcpy ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1094次,回复0
程序员陷阱题
 
程序员陷阱题本文转载自IT网it求职笔试真题库网。
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读889次,回复0
linux中string库函数的实现,笔试时常考
 
/** linux/lib/string.c** Copyright (C) 1991, 1992 Linus Torvalds*//** stupid library routines.. The optimized versions should generally be found* as inline code in <asm-xx/string.h>** These are buggy as well..** * Fri Jun 25 1999, Ingo Oeser <ioe@informatik.tu-chemnitz.de>* - Added strsep() which will replace strtok() soon (because strsep() is* reentrant and should be faster). Use only strsep() in new code, please.** * Sat Feb 09 2002, Jason Thomas <jason@topic.com.au>,* Matthew Hawkins <matt@mh.dropbear.id.au>* - Kissed strtok() goodbye*/#include <linux/types.h>#inc ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1394次,回复0
基础理论的笔试真题,常考
 
1. static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域2. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象。2) 不存在指向空值的引用,但是存在指向空值的指针。3. 描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性4. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈5. 什么是平衡二叉树?左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于16. 堆栈溢出一般是由什么原因导致的?没有回收垃圾资源7. 什么函数不能声明为虚函数?constructor8. 冒泡排序算法的时间复杂度是什么?O(n^2)9. 写出float x 与“零值”比较的if语句。if(x>0.000001&&x<-0.000001)10. Internet采用哪种网络协议?该协议的主要层次结构?tcp/ip 应用层/传输层/网络层/数据链路层/物理层11. Internet物理地址和IP地址转换采用什么协议?ARP (Address Resolution Protocol)(地址解析?f?h)12.IP地址的编码分为哪俩部分?IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上 ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1006次,回复0
C/C++笔试小结
 
1.void *p=malloc(100);sizeof(p)=4;---------------------指针的字节数,而不是指针指向的内容容量2. void Func(char str[100]){sizeof(str)=4;}--------------------数组作为函数的参数进行传递时,该数组自动退化为同类型的指针3.char str[100];sizeof(str)=100;--------------------不是函数的参数时4.char str[]="hello";char *p=str;int n=10;sizeof(str)=6;sizeof(p)=4;sizeof(n)=2;--------------------参考上面的5.#define A 3#define B 4#define C A+B#define s(x) x*xs(c)=A+B*A+B=3+4*3+4=19;-------------------宏展开只是简单的字符串替换6.一组碰到最多的题,至少4次笔试的题都有它,搞得我郁闷啊可参见林锐的《C/C++高质量编程》,很详细的解答了下面的题(1)void GetMemory(char *p, int num){ p = (char *)malloc(sizeof(char) * num);} void Test(void){ ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1178次,回复0
虚函数表
 
每个含有虚函数的类有一张虚函数表(vtbl),表中每一项指向一个虚函数的地址,实现上是一个函数指针的数组。 虚函数表既有继承性又有多态性。每个派生类的vtbl继承了它各个基类的vtbl,如果基类vtbl中包含某一项,则其派生类的vtbl中也将包含同样的一项,但是两项的值可能不同。如果派生类重载(override)了该项对应的虚函数,则派生类vtbl的该项指向重载后的虚函数,没有重载的话,则沿用基类的值。在类对象的内存布局中,首先是该类的vtbl指针,然后才是对象数据。在通过对象指针调用一个虚函数时,编译器生成的代码将先获取对象类的vtbl指针,然后调用vtbl中对应的项。对于通过对象指针调用的情况,在编译期间无法确定指针指向的是基类对象还是派生类对象,或者是哪个派生类的对象。但是在运行期间执行到调用语句时,这一点已经确定,编译后的调用代码能够根据具体对象获取正确的vtbl,调用正确的虚函数,从而实现多态性。 分析一下这里的思想所在,问题的实质是这样,对于发出虚函数调用的这个对象指针,在编译期间缺乏更多的信息,而在运行期间具备足够的信息,但那时已不再进行绑定了,怎么在二者之间作一个过渡呢?把绑定所需的信息用一种通用的数据结构记录下来,该数据结构可以同对象指针相联系,在编译时只需要使用这个数据结构进行抽象的绑定,而在运行期间将会得到真正的绑定。这个数据结构就是vtbl。可以看到,实现用 ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读993次,回复0
Linux守护进程的编程方法
 
其实守护进程编程也没有什么难的,你只要掌握了一般的步骤就行了,而且 以后就可以将原来的那些程序块照搬过来。 下面是一篇文章,我想已经说得很清楚了,你自己好好看看吧。 ----守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且 周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进 程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd ,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程 crond,打印进程lpd等。 ----守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相 同,造成不同Unix环境下守护进程的编程规则并不一致。这需要读者注意,照搬 某些书上的规则(特别是BSD4.3和低版本的SystemV)到Linux会出现错误的。下 面将全面介绍Linux下守护进程的编程要点并给出详细实例。 ----一.守护进程及其特性 ----守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与 之相似。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭 的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些 环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。最后,守 护进程的启动方式有其特殊之处。它可以 ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1115次,回复0
如何判断一段程序是由C 编译程序还是由C++编译程序编译的?
 
答案:#ifdef __cplusplus cout<<"c++";#else cout<<"c";#endif本文转载自IT网it求职笔试真题库网。
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1302次,回复0
c/ c++基本概念总结,笔试必考
 
static用法小结 static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数下面就这三种使用方式及注意事项分别说明一、局部静态变量在C/C++中, 局部变量按照存储形式可分为三种auto, static, register(谭浩强, 第174-175页)与auto类型(普通)局部变量相比, static局部变量有三点不同1. 存储空间分配不同auto类型分配在栈上, 属于动态存储类别, 占动态存储区空间, 函数调用结束后自动释放, 而static分配在静态存储区, 在程序整个运行期间都不释放. 两者之间的作用域相同, 但生存期不同.2. static局部变量在所处模块在初次运行时进行初始化工作, 且只操作一次3. 对于局部静态变量, 如果不赋初值, 编译期会自动赋初值0或空字符, 而auto类型的初值是不确定的. (对于C++中的class对象例外, class的对象实例如果不初始化, 则会自动调用默认构造函数, 不管是否是static类型)特点: static局部变量的”记忆性”与生存期的”全局性”所谓”记忆性”是指在两次函数调用时, 在第二次调用进入时, 能保持第一次调用退出时的 ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1496次,回复0
文件中有一组整数,要求排序后输出到另一个文件中
 
答案:#i nclude<iostream>#i nclude<fstream>using namespace std;void Order(vector<int>& data) //bubble sort{ int count = data.size() ; int tag = false ; // 设置是否需要继续冒泡的标志位 for ( int i = 0 ; i < count ; i++) { for ( int j = 0 ; j < count - i - 1 ; j++) { if ( data[j] > data[j+1]) { tag = true ; int temp = data[j] ; data[j] = data[j+1] ; data[j+1] = temp ; } } if ( !tag ) break ; }}void main( void ){ vector<int>data; ifstream in("c:\\data.txt"); if ( !in) ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1020次,回复0
一道经典常考的c语言题目,strcpy函数的编写
 
已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。 解说: 1.strcpy的实现代码 char * strcpy(char * strDest,const char * strSrc) { if ((strDest==NULL)||(strsrc="/=NULL")) file://[/1] throw "Invalid argument(s)"; //[2] char * strDestCopy=strDest; file://[/3] while ((*strDest++=*strSrc++)!='\0'); file://[/4] return strDestCopy; } 错误的做法: [1] (A)不检查指针的有效性,说明答题者不注重代码的健壮性。 (B)检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest& ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1383次,回复0
分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句
 
答案:BOOL : if ( !a ) or if(a)int : if ( a == 0)float : const EXPRESSION EXP = 0.000001if ( a < EXP && a >-EXP)pointer : if ( a != NULL) or if(a == NULL)本文转载自IT网it求职笔试真题库网。
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1102次,回复0
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
 
首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块A编译生成的目标代码中找到此函数extern "C"是连接申明(linkage declaration),被extern "C"修饰的变量和函数是按照C语言方式编译和连接的,来看看C++中对类似C的函数是怎样编译的:作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:void foo( int x, int y ); 该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。_foo_int_int 这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。例如,在C++中, ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1655次,回复0
C++的特性
 
C++新增加有重载(overload),内联(inline),Const,Virtual四种机制重载和内联:即可用于全局函数,也可用于类的成员函数;Const和Virtual:只可用于类的成员函数;重载:在同一类中,函数名相同的函数。由不同的参数决定调用那个函数。函数可要不可要Virtual关键字。和全局函数同名的函数不叫重载。如果在类中调用同名的全局函数,必须用全局引用符号::引用。覆盖是指派生类函数覆盖基类函数函数名相同;参数相同;基类函数必须有Virtual关键字;不同的范围(派生类和基类)。隐藏是指派生类屏蔽了基类的同名函数相同1、 函数名相同,但参数不同,此时不论基类有无Virtual关键字,基类函数将被隐藏。2、 函数名相同,参数也相同,但基类无Virtual关键字(有就是覆盖),基类函数将被隐藏。内联:inline关键字必须与定义体放在一起,而不是单单放在声明中。Const:const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。1、 参数做输入用的指针型参数,加上const可防止被意外改动。2、 按值引用的用户类型做输入参数时,最好将按值传递的改为引用传递,并加上const关键字,目的是为了提高效率。数据类型为内部类型的就没必要做这件事情;如:将void Func(A a) 改为v ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读805次,回复0
extern“C”有什么作用?
 
Extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C函数。这是因为C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不能直接调用C函数,加上extren “c”后,C++就能直接调用C函数了。Extern “C”主要使用正规DLL函数的引用和导出 和 在C++包含C函数或C头文件时使用。使用时在前面加上extern “c” 关键字即可本文转载自IT网it求职笔试真题库网。
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1728次,回复0
构造函数与析构函数
 
派生类的构造函数应在初始化表里调用基类的构造函数;派生类和基类的析构函数应加Virtual关键字。不要小看构造函数和析构函数,其实编起来还是不容易。#include <iostream.h>class Base{ public: virtual ~Base() { cout<< "~Base" << endl ; }};class Derived : public Base{ public: virtual ~Derived() { cout<< "~Derived" << endl ; }};void main(void){ Base * pB = new Derived; // upcast delete pB;}输出结果为: ~Derived ~Base如果析构函数不为虚,那么输出结果为 ~Base本文转载自IT网it求职笔试真题库网。
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读908次,回复0
有关引用类型的总结
 
什么是“引用”?申明和使用“引用”要注意哪些问题?引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用。2. 将“引用”作为函数参数有哪些特点?(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的 ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读1056次,回复0
指针的安全问题
 
看下面的例子: 例十七: char s=’a’; int *ptr; ptr=(int*)&s; *ptr=1298; 指针ptr是一个int*类型的指针,它指向的类型是int。它指向的地址就是s的首地址。在32位程序中,s占一个字节,int类型占四个字节。最后一条语句不但改变了s所占的一个字节,还把和s相临的高地址方向的三个字节也改变了。这三个字节是干什么的?只有编译程序知道,而写程序的人是不太可能知道的。也许这三个字节里存储了非常重要的数据,也许这三个字节里正好是程序的一条代码,而由于你对指针的马虎应用,这三个字节的值被改变了!这会造成崩溃性的错误。 让我们再来看一例: 例十八: 1。 char a; 2。 int *ptr=&a; ... ... 3。 ptr++; 4。 *ptr=115; 该例子完全可以通过编译,并能执行。但是看到没有?第3句对指针ptr进行自加1运算后,ptr指向了和整形变量a相邻的高地址方向的一块存储区。这块存储区里是什么?我们不知道。有可能它是一个非常重要的数据,甚至可能是一条代码。而第4句竟然往这片存储区里写入一个数据!这是严重的错误。所以在使用指针时,程序员心里必须非常清楚:我的指针究竟指向了哪里。 在用指针访问数组的时候,也要注意不要超出数组的低端和高端界限,否则也会造成类似的错误。 在指针的强制类型转换:ptr1=(TYPE*)ptr2中,如 ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读882次,回复0
内存的分配方式
 
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题1、 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。2、 栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。3、 堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。本文转载自IT网it求职笔试真题库网。
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读986次,回复0

页次: 4/10页 记录总数185 9 7 [ 1 2 3 4 5 6 7 8 9 10 ] 8 :