
C/C++语言
文章平均质量分 61
xdtongyuan
这个作者很懒,什么都没留下…
展开
-
软件业职位总结--开发类
需求分析师 在确定项目后需求分析师和客户进行深入和细致的沟通。理解业务和客户在他们中业务中用到交互方式;还需要理解这个项目中牵涉到的各种利益相关人员,要充分的从他们的想法中得到规范的业务需求。重要的是深入的理解业务需求,梳理出需求的各个功能点,每个功能的业务性质,另外还需要挖据出系统的非功能性需求。因为客户并不懂软件专业,他们的口述完全是对未来系统的模糊想法,有些客户可能前后描述的需转载 2013-10-18 19:19:43 · 840 阅读 · 0 评论 -
如何优化C语言代码(程序员必读)
应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。.选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密码的关系,一转载 2013-08-12 15:40:42 · 643 阅读 · 0 评论 -
构造函数失败
什么函数都有可能失败,构造函数也不另外,比如new一个对象或空间不成功。当构造函数失败的时候,其实很多时候我们不想这个对象被继续生成,这个时候就可以在构造函数里面抛出异常。C++规定构造函数抛出异常之后,对象将不被创建,析构函数也不会被执行,但已经创建成功的部分(比如一个类成员变量)会被部分逆序析构,不会产生内存泄漏。但有些资源需要在抛出异常前自己清理掉,比如打开成功的一个文件,最好关闭掉再抛出异转载 2013-08-20 20:24:49 · 623 阅读 · 0 评论 -
不能在析构函数里面抛出异常
从语法上面讲,析构函数抛出异常是可以的,C++并没有禁止析构函数引发异常,但是C++不推荐这一做法,从析构函数中抛出异常是及其危险的。析构函数可能在对象正常结束生命周期时调用,也可能在有异常发生时从函数堆栈清理时调用。前一种情况抛出异常不会有无法预料的结果,可以正常捕获;但后一种情况下,因为函数发生了异常而导致函数的局部变量的析构函数被调用,析构函数又抛出异常,本来局部对象抛出的异常应该是转载 2013-08-20 20:14:51 · 939 阅读 · 0 评论 -
delete []是如何得知数组个数的
通常在delete[]一个数组时,编译器要按顺序作如下两件事情: 1. 对每个数组元素调用析构函数 2. 释放对象数组所占内存 注意这是彼此独立的两步. 在第2步.编译器只需简单地把数组首地址告诉操作系统,操作系统内部有内存申请情况的记录(每个申请内存段的首地址,长度,etc..),因此会正确地释放掉内存.注意整个数组所占内存是一次释放掉的,而不是每个元素释放一次.转载 2013-08-20 21:05:35 · 760 阅读 · 0 评论 -
构造函数调用虚函数
blog.youkuaiyun.com/tianmo2010/article/details/8706209构造函数可以调用虚函数吗?语法上通过吗?语义上可以通过吗?C++是不允许虚构造函数。测试代码:[cpp] view plaincopyclass A { public: virtual A() {转载 2013-08-20 20:33:27 · 944 阅读 · 0 评论 -
define和inline 的区别
define:定义预编译时处理的宏; 只进行简单的字符替换,无类型检测typedef:定义类型别名 用于处理复杂类型 例: typedef int A; 则:A a; //定义a为intinline: 内联函数对编译器提出建议,是否进行宏替换,编译器有权拒绝 既为提出申请,不一定会成功 static一、产生背景引出原因:函数内转载 2013-08-20 21:09:22 · 660 阅读 · 0 评论 -
找出一堆数据中最小的K个数问题
题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。分析:这道题最简单的思路莫过于把输入的n个整数排序,这样排在最前面的k个数就是最小的k个数。只是这种思路的时间复杂度为O(nlogn)。我们试着寻找更快的解决思路。我们可以开辟一个长度为k的数组。每次从输入的n个整数中读入一个数。如果数组中已经插入的元转载 2013-08-20 21:23:35 · 974 阅读 · 0 评论 -
拷贝构造函数
拷贝构造函数作用及用途?什么时候需要自定义拷贝构造函数?也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生。对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什么用,其实复制构造函数能解决一些我们常常会忽略的问题。 为了说明复制构造函数作用,我先说说我们在编程时会遇到的一些问转载 2013-08-20 20:48:59 · 622 阅读 · 0 评论 -
C++异常机制
异常就是运行时出现出现的不正常(没说一样),例如系统运行时耗尽了内存或遇到意外的非法输入。C++的异常处理中,需要由问题检测部分抛出一个对象给处理代码,通过这个对象的类型和内容,两个部分能够就出现了什么错误进行通信。C++的异常处理机制包括:throw表达式,错误检测部分使用这种表达式来说明遇到了不可处理的错误,可以说throw引发(raise)了异常。try块(try block),转载 2013-08-20 20:39:47 · 625 阅读 · 0 评论 -
c++中类型转换机制
http://blog.youkuaiyun.com/tianmo2010/article/details/8706495类型转换机制:可以分为隐式类型转换和显示类型转换,显示类型转换也称为强制类型转换(cast),有四种名字命名的强制类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast。隐式的类型转换比较常见,在混合的类转载 2013-08-20 20:34:53 · 615 阅读 · 0 评论 -
C/C++中几个宏的总结
有人视宏为洪水猛兽,甚至要求完全从C/C++中摒弃,有人则认为宏为至尊宝典,在逻辑代码中都大量使用。个人认为这是个仁者见仁智者见智的问题,摒弃就没必要了,看看宏在MFC和ATL中的一些经典应用,你会发现如果不使用宏来实现一些消息映射和对象映射神马的那将让“苦逼”程序员多花费多少宝贵的时间。当然也不能滥用,尤其是尽量不要在逻辑代码中使用,宏中的逻辑出问题后,调试时候的痛苦你就真的会发现原来程序员真的转载 2013-08-19 22:51:32 · 584 阅读 · 0 评论 -
虚函数
虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用调用此类函数时,对其执行晚绑定,即通过指针(或引用)指向的类的类型信息来决定该函数是哪个类的。通常此类指针或引用都声明为基类的,它可以指向基类或派生类的对象。 多态指同一个方法根据其所属的不同对象可以有不同的行为(根据自己理解,不知这么说是否严谨)。 举个例子说明虚函数、多态、早绑定和晚绑定: 李氏两兄妹(转载 2013-08-19 21:36:28 · 690 阅读 · 0 评论 -
常见指针内存处理问题的详解
http://blog.youkuaiyun.com/tianmo2010/article/details/6785912常见的 指针,内存操作问题[cpp] view plaincopyvoid getMemory(char *p) { p = (char *)malloc(100); }转载 2013-08-19 21:56:20 · 698 阅读 · 0 评论 -
C++虚函数的原理及实现
虚函数是在类中被声明为virtual的成员函数,当编译器看到通过指针或引用调用此类函数时,对其执行晚绑定,即通过指针(或引用)指向的类的类型信息来决定该函数是哪个类的。通常此类指针或引用都声明为基类的,它可以指向基类或派生类的对象。 多态指同一个方法根据其所属的不同对象可以有不同的行为(根据自己理解,不知这么说是否严谨)。 举个例子说明虚函数、多态、早绑定和晚绑定: 李氏两兄妹(转载 2013-08-19 20:11:55 · 681 阅读 · 0 评论 -
VC++中关于字节对齐的问题
VC中下面几个结构体大小分别是多少呢struct MyStruct{ double m4; char m1; int m3;};struct MyStruct { char m1; double m4; int m3;};#pragma pack(push)//保存对齐状态#pragma pack(1转载 2013-08-13 15:04:49 · 1318 阅读 · 0 评论 -
深入探讨C++中的引用
引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖引玉的作用。 一、引用简介 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一转载 2013-08-13 23:11:27 · 455 阅读 · 0 评论 -
C/C++中的函数参数传递机制
一、 函数参数传递机制的基本理论 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。以下讨论称调用其他函数的函数为主调函数,被调用的函数为被调函数。 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的转载 2013-10-18 19:10:33 · 1317 阅读 · 0 评论 -
C中内存分配的方式
在C 中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 一.简介:1.栈,就是那些由编译器在需要的时候分配,在无需的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。 2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程式去控制,一般一个new就要对应一个delete。假如程式员没有释放掉,那么在程式结束后,操作转载 2013-10-18 18:53:24 · 812 阅读 · 0 评论 -
指针与数组的区别和联系
一.指针与数组的联系:指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如: char str[20], *ptr; ptr=str; ptr被置为数组str的第一个元素转载 2013-10-18 17:56:20 · 1082 阅读 · 0 评论 -
浅谈内存泄漏
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题,比如Smart Pointer,Garbage Collection等。Smart Pointer技术比较成熟,STL中已经包含支持Smart Pointer的class,但是它的使用似乎并不广泛,而且它也不能解决所有的问题;Garbage Collection技术在Java中已经比较成熟转载 2013-10-18 17:55:04 · 684 阅读 · 0 评论 -
常见的预处理命令及功能
1.常见的预处理功能: 预处理器的主要作用就是把通过预处理的内建功能对一个资源进行等价替换,最常见的预处理有:文件包含,条件编译、布局控制和宏替换4种。 文件包含:#include 是一种最为常见的预处理,主要是做为文件的引用组合源程序正文。 条件编译:#if,#ifndef,#ifdef,#endif,#undef等也是比较常见的预处理,主要是进行编译时进行有选择的转载 2013-10-18 17:50:26 · 3040 阅读 · 0 评论 -
c/c++中内存划分
一、 在c中分为这几个存储区 1.栈 - 由编译器自动分配释放 2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放 4.另外还有一个专门放常量的地方。- 程序结束原创 2013-10-18 17:48:44 · 718 阅读 · 0 评论 -
指针数组与数组指针
数组指针--指向数组的指针,是一个指针,其指向的类型是数组;指针数组--元素为指针的数组,是一个数组,其中的元素为指针1.指针数组数组名本身就是一个指针,指向数组的首地址。注意这是声明定长数组时,其数组名指向的数组首地址是常量。而声明数组并使某个指针指向其值指向某个数组的地址(不一定是首地址),指针取值可以改变。指针数组是多个指针组成了数组 int *p[4]; //它是四转载 2013-10-18 17:05:53 · 693 阅读 · 0 评论 -
C中static的常见作用
C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增长方向:自顶向下增长;自动变量以及每次函数调用转载 2013-10-18 16:55:56 · 612 阅读 · 0 评论 -
C语言预处理命令总结大全
C程序的源代码中可包括各种编译指令,这些指令称为预处理命令。虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境。本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性。ANSI标准定义的C语言预处理程序包括下列命令:#define,#error,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#p转载 2013-10-18 16:49:16 · 765 阅读 · 0 评论 -
sizeof与strlen详解
一、sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。 1.sizeof的使用方法 1) 用于数据类型 sizeof使用形式:sizeof(type) 数据类型必须用括号括住。如转载 2013-10-18 18:52:28 · 786 阅读 · 0 评论 -
typedef与typedef struct用法详解
typedef 声明,简称 typedef,为现有类型创建一个新的名字。比如人们常常使用 typedef 来编写更美观和可读的代码。所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。本文下面将竭尽全力来揭示 typedef 强大功能以及如何避免一些常见的陷阱。1. 定义易于记忆的类型名typedef 使用最多的地方是创建易于记原创 2013-10-18 17:16:49 · 1371 阅读 · 0 评论 -
#define用法详解
1.#define 的作用 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。 在C或C++语言中,“宏”分为有参数和无参数两种。2. 无参宏定义 无转载 2013-10-18 16:19:07 · 750 阅读 · 0 评论 -
浅谈C++多态性
C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言。我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握。 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphisn),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成转载 2013-08-17 20:30:10 · 489 阅读 · 0 评论 -
面向对象的三个基本特征
面向对象的三个基本特征是:封装、继承、多态。封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。继承面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下转载 2013-08-13 23:26:11 · 468 阅读 · 0 评论 -
用堆栈实现十进制转换为二进制
#include #include #define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OVERLOW -2#define ok 1#define error -1 typedef struct sqstack{ int *base; int *top; int max;}sqstac转载 2013-06-24 21:20:54 · 4638 阅读 · 0 评论 -
实现连续正整数之和为某个特定值【算法】
一个正整数有可能被表示成n(n>=2)连续正整数之和如:15=1+2+3+4+5;15=4+5+6;15=7+8;请编写程序,根据输入的正整数,找出符合这种要求的所有连续正整数序列,如没有则输出none输入:15输出:1 2 3 4 54 5 67 8输入:16输出:none[cpp] view plain转载 2013-06-24 21:59:08 · 896 阅读 · 0 评论 -
strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。me原创 2013-06-21 14:45:21 · 750 阅读 · 0 评论 -
inline内联函数和宏的区别
1、内联函数在编译时展开,而宏在预编译时展开2、在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。3、内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能。4、宏不是函数,而inline是函数5、宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。原创 2013-06-07 15:51:16 · 684 阅读 · 0 评论 -
const和#define的特点和区别
#define的生命周期终止于编译期,存在于程序的代码段,在实际程序中它只是一个常数,一个命令中的参数,并没有实际的存在 const存在于程序的数据段,并在堆栈中分配了空间。const常量是一个run_time的概念。在程序中确确实实存在着并可以调用、传递。const常量有数据类型,而宏常量没有数据类型,编译器可以对const常量进行类型安全检查。原创 2013-06-07 14:50:53 · 748 阅读 · 0 评论 -
将字符串中的空格用逗号替换
一个字符串里面包含了一些位置不定的空格符,把里面所有的非空格字符找出来,把空格用‘,’替换。替换后的句子末尾必须有一个‘,’存在。// 空格用逗号替换.cpp : Defines the entry point for the console application.//#include "stdafx.h"char *replaceString(const char* src,原创 2013-06-07 12:07:59 · 6396 阅读 · 0 评论 -
C++中const的作用
1、可以定义常量。const定义的常量编译器可以对其进行数据静态类型安全检查2、修饰函数形式参数。当输入参数为用户自定义类型和抽象数据类型时,将值传递改为const&传递可以提高效率。(引用传递不需要产生临时对象,省去了临时对象的构造、复制、析构过程消耗的时间,为了防止改变加const)3、const修饰函数的返回值:如果给指针传递的函数返回值加const,则返回值不能被直接修改,且该返回原创 2013-06-07 15:05:27 · 567 阅读 · 0 评论 -
C语言编译过程总结详解
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下: 从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的转载 2013-06-07 10:43:48 · 975 阅读 · 0 评论 -
C语言面试题---p1+5;p2+5
若有 unsigned char *p1; unsigned long *p2; p1 = (unsigned char *)0x1000; p2 = (unsigned long *)0x2000;请问 p1+5=( ) p2+5=( ) #include i转载 2013-06-07 10:17:21 · 2157 阅读 · 0 评论