C/C++
文章平均质量分 57
li4951
这个作者很懒,什么都没留下…
展开
-
浮点数比较的问题
首先看一段代码(VC中,C++环境下): int a = 2; int b = 3; int c = 6; if(1.0 / a + 1.0 / 3 + 1.0 / c >= 1.0) cout << "Yes" << endl; else c原创 2011-09-17 09:06:27 · 1001 阅读 · 0 评论 -
我的程序又core dump了
小心翼翼的检查好源文件,make一下,庆幸编译完美通过。run一下,过了不知道多久,程序又core了!你是否也遇到过这样的情况,有点想骂人的冲动,程序总是无端的core dump,多个模块,gdb调试之也看不出问题,这样的系统交付出去,自己都不放心。骂人是没有用的,发泄发泄,该调试还得调试。冷静下来,梳理一下思路,分析下到底哪里出了问题。运行时的segment error大多数是内存问题。原创 2013-06-23 17:13:52 · 1421 阅读 · 0 评论 -
全排列的生成
前两种是字典序,第三种非字典序。方法一:组合数学方法 (总结规律,得出结论,偏向数学)顾名思义,这种方法的思想就是将所有的n元排列按“字典顺序”排成队,以12…n为第一个排列,排序的规则,也就是有一个排列(p)=(p1p2p3…pn)直接生成下一个排列的算法可归结为:(1)求满足关系式p(k-1)(2)求满足关系式p(i-1)(3)p(i-1)与p(j)互换位置得q=(q1q2原创 2012-04-06 16:23:53 · 2824 阅读 · 0 评论 -
函数的设计
函数作为C/C++程序的基本功能单元,具有非常重要的作用,良好的函数接口设计,合适的入参,出参,返回值的设计对整个程序大有裨益,会让开发者感到流畅,清爽,水到渠成的感觉。相反,风格不统一,格式混乱,前后矛盾冲突,不仅会让团队其他人感到迷惑,也会降低整个实现的流畅性,感到捉襟见肘,拆东墙补西墙。本文主要总结了函数的接口设计和内部实现的一些规则。函数接口的两大要素是参数和返回值。C语言中,函数原创 2013-03-16 21:13:16 · 1953 阅读 · 1 评论 -
链接常见错误
一.概要对于语言初学者,开始的时候总是把所有的代码写在一个源文件中。当代码行非常庞大时候,这样的做法往往很难维护和修改。而真正的工程项目都是由多人共同完成的,因此划分模块,组织良好清晰的文件结构显得非常重要。本文主要针对C/C++语言初学者在组织工程文件结构时所遇到的众多问题和概念给予总结。二.认识编译单元开始时,自己写的小工程只有一个源文件时,通过编译链接就可生成可执行文件。这个过程原创 2012-12-08 19:56:54 · 1211 阅读 · 0 评论 -
C/C++ IO总结
正如Effective C++所讲:C++就是一个语言联邦。他是一个多面手。对于同一个问题往往有很多种解决办法,具体采用那种办法就交给程序员去选择。因此本文对C++文件IO的整理就得分为两个面:C方式,C++方式。程序员可根据自己所在团队选择合适且统一的IO方式。 一. 基础知识1.1文件类型:ASCII文件和二进制文件首先我不保证文件类型只有这两种。但理解这两种文件对学习文件IO原创 2012-11-06 19:38:43 · 6278 阅读 · 0 评论 -
操作内存利器memset,memmove,memcpy
一:函数声明:void *memset(void *s, int c, size_t n);memset:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。 1.1:普通理解大家平时用的最多的就是对一个数组进行初始化。例如int data[100];me原创 2011-09-22 18:08:37 · 834 阅读 · 1 评论 -
函数的重写
我在OOP方面的知识一直都使用后再看理论的,因为之前的理论大多都没有吸收,也缺乏深入理解。最近又重新学习了继承体系中关于类中方法的重写(override)。先通过在C++下的例子来阐述这一机制。#include#includeusing namespace std;class People{public: People(string name){原创 2012-01-12 21:13:45 · 3211 阅读 · 4 评论 -
C语言的内存分配
一个Java程序员需要对栈空间和堆空间理解到位,那么学C语言需要对内存分配理解透彻吗?写了这么多年的C语言,熟练不少算法,本以为已经达到那种语言在外,内功在内的高度了。却从未思考过C语言的内存分配,直到今天遇到了问题,实在是惭愧啊……先看一下两段代码:char* toStr() { char *s = "abcdefghijkl"; return s;}int ma原创 2011-11-24 19:56:29 · 5222 阅读 · 9 评论 -
C++继承体系下构造的执行顺序
理清下面代码即可:#include class B{public: B(int i) { b=i; cout << "B constructed" << endl; } int b;};class V: public B{public: V(int i, int j):B(i) { v=j; cou原创 2012-04-12 21:27:30 · 875 阅读 · 0 评论 -
DFS解素数环问题
问题描述: 将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。 算法描述:典型深搜问题。 代码:#includeusing namespace std;int N = 0;int data[30] = {0};bool not_contain(int num, int depth){ f原创 2012-04-08 20:27:18 · 1470 阅读 · 0 评论 -
C++继承体系下类中属性的能见度总结
在面向对象技术下类中成员的可见性以及访问控制程度总是让程序员发懵。特别是初学者。下面将对其做一总结。1.横向来看,比较简单。类中成员的访问控制程度有三种:public,private,proteced。public:完全向外部公开。protected:类中以及派生类均可访问,不能再类外访问。private: 仅本类中可以访问,类外不能访问。友元除外。横向的较简单。一旦涉及到纵向原创 2012-01-13 15:18:57 · 1806 阅读 · 0 评论 -
函数指针的经典应用
本文并不是将什么是指针函数,不过通过本文会令你对指针函数理解更深。对于C++里面的排序函数qsort大家并不陌生。由于排序在计算机系统中的大量使用,各种程序设计语言都提供了相应的模板或泛型。因为排序只是一种顺序上面的变化,并不会影响数据本身。所以不关乎什么类型的数据排序,重要的是排序算法本身。快速排序的平均效率较高。适合大部分的排序情况。在这里,将通过讲解qsort函数来学习指针函数的使用。原创 2011-12-01 19:01:06 · 3414 阅读 · 0 评论 -
函数指针和指针函数
一.函数指针例子:#includeusing namespace std;int function(int a, int b){ return a >= b ? a : b;}int(*ptr)(int x1, int x2);int main(){ ptr = function; cout << ptr(4, 3) << endl;原创 2011-11-24 21:38:37 · 1349 阅读 · 1 评论 -
C/C++易错总结
一:分析如下代码char* toStr(int num){ char s[100]; int i = 0; while(num > 0) { s[i++] = num % 10 + '0';//记住为什么+'0' num /= 10; } s[i] = '\0'; return s;}本意为将整数转化成字符数组存储,然后将这个字符数组返回。经艰苦实践,发现不能,原因是原创 2011-09-11 21:51:11 · 581 阅读 · 0 评论 -
函数的调用方法
0.概述如果你能很清楚的理解下面这个程序,那么本篇文章就不用看了。班门弄斧而已。void GetMemory(char* p){ p = new char[100];}void main(){ char *str = "1234"; GetMemory(str); strcpy(str, "hi"); //出错! str = NULL! printf("%s\n", s原创 2012-04-24 21:25:54 · 1384 阅读 · 1 评论