- 博客(261)
- 资源 (4)
- 收藏
- 关注
原创 在函数体内声明[1] char *str=”abc”;和[2] char str[]={‘a’,’b’,’c’}有什么区别
在函数体内声明[1] char *str=”abc”;和[2] charstr[]={‘a’,’b’,’c’}有什么区别 [1][2]中str变量都分配在栈上 [1]中str指向常量存储区的字符串”abc”,其中字符串末尾会补0 [2]中str数组的内容存储于栈空间,数组大小为3,字符串不会补0
2013-07-01 00:21:07
1491
原创 对一个包含虚函数成员的对象bzero()会有什么问题?
对一个包含虚函数成员的对象bzero()会有什么问题?对包含虚函数成员的对象bzero会破坏该对象的虚函数表(VTABLE),调用该虚函数时将core。原型:extern void bzero(void *s, int n);用法:#include 功能:置字节字符串s的前n个字节为零且包括‘\0’。说明:bzero无返回值,并且使用strings.h头文件,strings.h
2013-07-01 00:20:52
742
原创 c++中虚函数的实现机制?
c++中虚函数的实现机制?表面现象:虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用调用此类函数时,对其执行晚绑定,即通过指针(或引用)指向的类的类型信息来决定该函数是哪个类的。实现机制:编译器对每个包含虚函数的类创建一个表(称为VTABLE)。在VTABLE中,编译器放置特定类的虚函数地址。在每个带有虚函数的类中,编译器置一指针,称为vpointer(缩写为VP
2013-07-01 00:20:38
520
原创 如何避免同一头文件的多次include
如何避免同一头文件的多次include#ifndef …或者 #pragma once#pragma once是编译器相关的,就是说即使这个编译系统上有效,但在其他编译系统也不一定可以,不过现在基本上已经是每个编译器都有这个杂注了。#ifndef,#define,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程
2013-07-01 00:20:01
628
原创 char的整型运算
char的整型运算char a = ‘5’;char b = ‘6’;couta = a - ‘0’;cout附:ASCII码0:48、A:65、a:97‘A’=’a’-32
2013-07-01 00:19:45
676
原创 大数相加问题
大数相加问题问题描述:实现A+B=C 其中A、B位数超过100位 算法思想:大数使用字符串存储,每一个单元存储操作数的每一位,之后执行位相加。基本思路:字符串反转、字符变数字、位运算、反序输出C语言代码:#include #include #define Max 101 void print(char sum[], int result_len
2013-07-01 00:19:22
555
原创 完成一个trim_string函数,将一个字符串两端的空格、回车、tab符号去掉。
完成一个trim_string函数,将一个字符串两端的空格、回车、tab符号去掉。void kill_space( char *str){ int i, j; assert( str != NULL); // /*find the first non-space char's position */ for (i = 0; (str[i] =
2013-07-01 00:18:43
1099
原创 static、const、volatile、typeof关键字的用途描述
static、const、volatile、typeof关键字的用途描述static:静态函数、静态变量、静态类成员 const:const变量,const指针、const函数 volatile:多线程共享变量 typeof:获取类型值
2013-07-01 00:18:28
868
原创 #define的一些注意点
#define的一些注意点:1)#define SQR(x) printf("Thesquareof x is%d.\n",((x)*(x)));如果这样使用宏:SQR(8);则输出为: The squareof x is 64.注意,引号中的字符x被当作普通文本来处理,而不被当作一个可以被替换的语言符号。假如你确实希望在字符串中包含宏参数,那我们就可以使用“#”,它可以把语
2013-07-01 00:18:20
813
原创 试图用宏开始或结束一段注释是不行的
试图用宏开始或结束一段注释是不行的#define BSC // #define BMC /* #define EMC */1) BSC my single-linecomment2) BMC my multi-linecomment EMC1)和2)都错误,因为注释先于预处理指令被处理,当这两行被展开成//…或/*…*/时,注释已处理完毕此
2013-07-01 00:18:00
539
原创 define中为何经常会使用 do{ } while(0);来包装多条语句代码
define中为何经常会使用 do{ } while(0);来包装多条语句代码do{}while(0)的目的是为了在 for 循环和 if 语句时,避免出现下面的情况 #define xxx i++; i--; for (I = 0 ; I for ( I = 0 ; I (对define中do{}while(0)的理解)
2013-07-01 00:17:29
1036
原创 使用 define 定义一年有多少毫秒
使用 define定义一年有多少毫秒#define MS_OF_YEAR (365*24*60*60*1000)UL(对于整数溢出的考虑)
2013-07-01 00:17:21
1183
原创 依赖、关联、聚合、组合的区别。
依赖、关联、聚合、组合的区别。依赖:Uses a。这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如类B作为参数被类A在某个method方法中使用;关联:Has a。这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能
2013-07-01 00:17:00
586
原创 设 一个64位整型n,各个bit位是1的个数为a个. 比如7, 2进制就是 111, 所以a为3。现在给出m个数, 求各个a的值。要求代码实现。
设 一个64位整型n,各个bit位是1的个数为a个. 比如7, 2进制就是 111, 所以a为3。现在给出m个数, 求各个a的值。要求代码实现。#include#define M 5int count=0; int GetCnt(int n){ count=0; do{ if( n&1) {
2013-07-01 00:16:30
757
原创 Linux程序、进程管理
Linux程序、进程管理Linux操作系统包括如下3种不同类型的进程,每种进程都有其自己的特点和属性。(1)交互进程:由shell启动的进程。可在前台运行,也可在后台运行;(2)批处理进程:一个进程序列;(3)守护进程:守护进程(Daemon,也称为精灵进程)是指在后台运行而又没有启动终端或登录shell。守护进程一般由系统开机时通过脚本(script)自动激活启动或者由root用
2013-07-01 00:16:10
844
原创 数据库事务的四大特性是什么?
数据库事务的四大特性是什么?(1)原子性 事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新。前者称事务已提交,后者称事务撤消(或流产)。DBMS必须确保由成功提交的事务完成的所有操纵在数据库内有完全的反映,而失
2013-07-01 00:15:44
754
原创 简述ext2和ext3的区别?
简述ext2和ext3的区别?Linux ext2/ext3文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。
2013-07-01 00:15:26
728
原创 同步和互斥有什么联系和区别
同步和互斥有什么联系和区别相交进程之间的关系主要有两种,同步与互斥。所谓互斥,是指散步在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。所谓同步,是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的 某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。 显然,同步是一
2013-07-01 00:14:53
842
原创 黑盒测试用例设计方法
黑盒测试用例设计方法1)等价类划分法:等价类划分法是一种典型的、重要的黑盒测试方法,它将程序所有可能的输入数据(有效的和无效的)划分成若干个等价类。然后从每个部分中选取具有代表性的数据当做测试用例进行合理的分类,测试用例由有效等价类和无效等价类的代表组成,从而保证测试用例具有完整性和代表性。有效等价类指对于程序规格说明来说,是合理的、有意义的输入数据构成的集合。无效等价类和有效等价类相
2013-07-01 00:14:24
598
原创 软件测试方法
软件测试方法1)冒烟测试,英文是Smoke testing。 冒烟测试的名称可以理解为该种测试耗时短,仅用一袋烟功夫足够了。也有人认为是形象地类比新电路板功基本功能检查。任何新电路板焊好后,先通电检查,如果存在设计缺陷,电路板可能会短路,板子冒烟了。 冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常,可以进行后续的正式测试工作。冒烟测试的执行者
2013-07-01 00:14:08
891
原创 说明链表和数组作为数据的不同组织形式,各自的优缺点。
说明链表和数组作为数据的不同组织形式,各自的优缺点。 数组,在内存上给出了连续的空间。链表,内存地址上可以是不连续的,每个链表的节点包括原来的内存和下一个节点的信息(单向的一个,双向链表的话,会有两个)。 数组优于链表的: A. 内存空间占用的少,因为链表节点会附加上一块或两块下一个节点的信息。 但是数组在建立时就固定了。所以也有可能会因为建立的数组过大或不足引起内存上的问题
2013-07-01 00:12:58
948
原创 new/delete与malloc/free之间的联系和区别
new/delete与malloc/free之间的联系和区别(1) malloc/free和new/delete的联系 a)存储方式相同。malloc和new动态申请的内存都位于堆中。申请的内存都不能自动被操作系统收回,都需要配套的free和delete来释放。 b)除了带有构造函数和析构函数的类等数据类型以外,对于一般数据类型,如int、char等等,两组动态申请的方
2013-07-01 00:12:40
1025
原创 free、delete、delete[]
free、delete、delete[]delete汇编化是:call destructor.call delete(void*)->free+一些判断 free就是free delete[]是调相应数量的destructor,delete(void*)一般的内存泄露是来源于destructor少掉了时候。
2013-07-01 00:12:24
448
原创 请在下面的代码片段中找出可能有错误或有安全隐患的地方,并写出错误的原因。
请在下面的代码片段中找出可能有错误或有安全隐患的地方,并写出错误的原因。struct complex_t{ int real; int imag;}; //若:create(complex_t&* p则 cannot convert from 'struct complex_t *' to'struct complex_t **int create(
2013-07-01 00:12:09
1164
原创 如果收到一个字符串型的浮点数,比如“1234.56”,如何变成浮点数。
如果收到一个字符串型的浮点数,比如“1234.56”,如何变成浮点数。double atof(chars[]){ double val,power; int i,sign; for(i=0;isspace(s[i]);i++)//跳过空白 ; sign=(s[i]=='-')?-1:1
2013-07-01 00:11:53
580
原创 生产者-消费者问题
生产者-消费者问题在多道程序环境下,进程同步是一个十分重要又令人感兴趣的问题,而生产者-消费者问题是其中一个有代表性的进程同步问题。下面我们给出了各种情况下的生产者-消费者问题,深入地分析和透彻地理解这个例子,对于全面解决操作系统内的同步、互斥问题将有很大帮助。(1)一个生产者,一个消费者,公用一个缓冲区。定义两个同步信号量: empty——表示缓冲区是否为空,初值为1。
2013-07-01 00:11:33
930
原创 给出一个现实中的例子,然后用pv操作解决它。
给出一个现实中的例子,然后用pv操作解决它。PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的值减1,即S=S-1; ②如果S ³0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。 V(S):①将信号量S的值加1,即S=S+1; ②如果S>0,则该
2013-07-01 00:11:15
931
原创 虚函数和纯虚函数的区别是什么?
虚函数和纯虚函数的区别是什么?定义一个函数为虚函数,不代表函数为不被实现的函数,定义它为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现,定义他是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。虚函数有实现,纯虚函数没有方法的实现。包含纯虚函数的类将成为抽象类,不可实例化对象。纯虚函数必循在其子类中进行重写,不
2013-07-01 00:10:56
612
原创 递归算法的时间复杂度分析
递归算法的时间复杂度分析 例子:求N!。 这是一个简单的"累乘"问题,用递归算法也能解决。 n! = n * (n - 1)! n > 1 0! = 1, 1! = 1 n = 0,1 因此,递归算法如下: fact(intn) { if(n== 0 || n == 1)
2013-07-01 00:10:39
1601
原创 写出斐波那契数列的递归与迭代代码,并分析时间和空间复杂度。
写出斐波那契数列的递归与迭代代码,并分析时间和空间复杂度。斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、…… 用数学公式表示出来就是: F(1)= 1,F(2)=1 (n=1,2) F(n)=F(n-1)+ F(n-2) (n>2)有三种比较常用的求解第n项斐波那契数列的方法:递归法、迭代法、通项
2013-07-01 00:10:17
5100
1
原创 存储过程的概念以及优缺点是什么?
存储过程的概念以及优缺点是什么?写出一个存储过程的大概代码,你是如何在项目中应用的,又产生了什么问题,你是如何解决的?存储过程是一套已经预先编译好的SQL代码,是SQL语句和可选控制语句的集合及一个独立的数据库对象.存储过程在数据库内可以由应用程序调用执行,而且允许用户声明变量、有条件执行以及其他强大的编程工程。由于存储过程是已经编译好的代码,所以执行的时候不需要分析也不需要再次编译,能够提高
2013-07-01 00:09:58
2737
原创 操作系统中同一父进程中的子进程之间如何交互?不同父进程中的子进程之间如何交互?
操作系统中同一父进程中的子进程之间如何交互?不同父进程中的子进程之间如何交互?父进程与子进程之间如何交互?进程通信的类型 1. 共享存储器系统(Shared-Memory System)(全局变量)(1)基于共享数据结构的通信方式。 (2)基于共享存储区的通信方式。 2. 消息传递系统(Message passing system)进程间的数据交换,是以格式化的消
2013-07-01 00:09:34
1236
原创 LINUX中什么是僵尸进程和孤儿进程,它们是否消耗系统资源?
LINUX中什么是僵尸进程和孤儿进程,它们是否消耗系统资源?僵尸进程将会导致资源浪费,而孤儿则不会。由于子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束. 那么会不会因为父进程太忙来不及wait子进程,或者说不知道子进程什么时候结束,而丢失子进程结束时的状态信息呢? 不会。因为UNIX提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息,就可以得
2013-07-01 00:09:09
2030
原创 给你两个有序链表,编写一个函数,把两个链表合并成一个新的有序链表,返回头指针
给你两个有序链表,编写一个函数,把两个链表合并成一个新的有序链表,返回头指针。(要求一分钟内给出两个算法)递归算法所体现的“重复”一般有三个要求: 一是每次调用在规模上都有所缩小(通常是减半); 二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条
2013-07-01 00:08:53
4841
原创 图的广度优先遍历
图的广度优先遍历(1)邻接表表示图的广度优先搜索算法 void BFS(ALGraph*G,int k) {// 以vk为源点对用邻接表表示的图G进行广度优先搜索 int i; CirQueue Q; //须将队列定义中DataType改为int EdgeNode *p; InitQueue
2013-07-01 00:08:26
775
原创 图的深度优先遍历
图的深度优先遍历(1)深度优先遍历算法 typedef enum{FALSE,TRUE}Boolean;//FALSE为0,TRUE为1 Boolean visited[MaxVertexNum]; //访问标志向量是全局量 void DFSTraverse(ALGraph *G) { //深度优先遍历以邻接表表示的图G,而以邻接矩阵表示G时,算
2013-07-01 00:08:08
701
原创 图的邻接表的形式说明及其建表算法
图的邻接表的形式说明及其建表算法 对图的每个顶点建立一个单链表(n个顶点建立n个单链表),第i个单链表中的结点包含顶点Vi的所有邻接顶点。又称链接表。(1)邻接表的形式说明 typedef struct node{//边表结点 int adjvex; //邻接点域 structnode *next; //链域
2013-07-01 00:07:47
897
原创 为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?
为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢? 这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你未必会马上会关闭SOCKET,也即你可能
2013-07-01 00:06:39
1442
《C++ Primer 4 Answer Book》 整理
2011-12-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅