![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/CPP
文章平均质量分 57
shangyaowei
这个作者很懒,什么都没留下…
展开
-
Djyos的可移植性(转载)
http://www.djyos.com/?page_id=41Djyos的可移植性 提到可移植性,很多人会想到汇编,许多操作系统会把汇编行数看做可移植性的首要指标。其实,这又是一个误区。我们在谈论可移植性之前,还是要先弄清楚一个问题,即什么是可移植性!这也算问题吗?移植不就是把操作系统从一个硬件平台换到另一个硬件平台运行吗?这样理解,未免太片面了。软件的可原创 2013-12-19 20:49:08 · 653 阅读 · 0 评论 -
提高代码水平方面的优秀书目
作者:gfree.wind@gmail.com博客:blog.focus-linux.net下面的书籍,我认为绝对有助于提高代码的质量和水平。这里没有列出算法方面的书籍——那些书籍会在另一篇文章中列出:《高质量程序设计指南——C++/C语言》《程序员修炼之道》《编程高手箴言》《软件随想录》《编程珠玑》《高效程序员的45个习惯》《代码之美》《架构之美》《代码大全》《代码质量原创 2013-12-19 20:48:54 · 494 阅读 · 0 评论 -
C编程方面的好书
下面是我认为C编程方面的优秀书籍:《C语言程序设计》——BrianW. Kernighan和DennisM. Ritchie《C专家编程》《C语言解惑》《C陷阱与缺陷》《C语言接口与实现》《C语言深度解析》《C与指针》欢迎大家来补充!我准备针对每个方面都列一个书单,大家补充的时候,请注意是否属于这个方面的。原创 2013-12-19 20:48:50 · 376 阅读 · 0 评论 -
编写安全代码:再论整数类型转换
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net 前几天看C99标准,写了两篇关于整数提升的博文,http://blog.chinaunix.net原创 2013-12-19 20:48:48 · 391 阅读 · 0 评论 -
好书收藏
作者:gfree.wind@gmail.com博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。========================原创 2013-12-19 20:48:42 · 508 阅读 · 0 评论 -
动态链接库中函数的地址确定---PLT…
前面写过动态链接库延迟绑定的一篇博文,那篇文章我非常喜欢,但是当时刚搞清楚,自己写的比较凌乱,我最近学习了Ulrich Drepper的How towrite share library,学习了几篇其他的讲述动态链接的文章,再次整理了这篇文章。 有一个问题是我们调用了动态链接库里面的函数,我们怎么知道动态链接库里面的函数的地址呢?事实上,直到我们第一次调用这个函数,我们并不知道这原创 2013-12-19 20:48:37 · 883 阅读 · 0 评论 -
计算机中信息的表示与处理
一切又回到了学习、总结、学习、总结模式,回顾了一下找工作期间遇到的很多问题,其实归根到底是因为基础不牢固,没有搞清楚其中的一些本质。就像前一章总结的浮点型运算一样,对于其他的数据类型都存在各种各样的难点,稍微不注意就会导致错误的产生。这些本质的东西本不应该现在来学习,但亡羊补牢为时不晚。 信息的编码方式 在计算机中信息都是以0、1两种数据来表示的,大家都知道,但是就是这两个简原创 2013-12-19 20:48:35 · 704 阅读 · 0 评论 -
关于C语言中函数调用和参数传递机…
[原创]关于C语言中函数调用和参数传递机制的探讨关于C语言中函数调用和参数传递机制的探讨函数,相信许多人也知道其重要性;一个文件往往由一个或者多个函数构成的。然而可能许多人还不知道函数调用的一些深层问题,所以我写的这篇文章一来是应了一个好朋友的要求而写,二来希望一些朋友能够从我这篇文章了解函数调用的机制。但是并不是每个人都可以完全读懂这文章,想完全读懂此文,我想必须具备三个条件:一、对原创 2013-12-19 20:47:55 · 480 阅读 · 0 评论 -
面试题目---C语言可变参数函…
原文地址:面试题目---C语言可变参数函数的实现作者:sunwillow这道题的关键是理解函数参数的压栈顺序:1、函数的参数是从右到左压栈;2、栈的生长方向是从上到下(即从高地址往低地址)3、printf(char *fmt,...) fmt 是放在栈顶(最低地址),第二个参数是高一个地址,4、第二个参数的获取方法是 (char *)&fmt +sizeof(fmt) ,这个就是第二转载 2013-12-19 20:47:53 · 582 阅读 · 0 评论 -
亲密接触C可变参数函数
作者:林海枫网址:http://blog.csdn.net/linyt/archive/2008/04/02/2243605.aspx[*]欢迎转载,但请完整转载并注明作者以及地址,请勿用于任何商业用途。 可变参数函数的实现 如果说C语言具有很多低级语言的特性,那么可变参数函数便是这些特性中的一个。无论是C专家还是C初学者,都对printf标准库函数相当了解,因为它是我们原创 2013-12-19 20:47:51 · 399 阅读 · 0 评论 -
数组指针和数组头指针
4. main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d,%d",*(a+1),*(ptr-1)); } 输出结果是什么? 答案:输出:2,5 *(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5 &a+1不是首地址+1,系统会认为加一个a数组的偏原创 2013-12-19 20:47:43 · 390 阅读 · 0 评论 -
重载(overload)和重写(overried,…
18. 重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?常考的题目。从定义上来说:重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。重写:是指子类重新定义复类虚函数的方法。从实现原理上来说:重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说原创 2013-12-19 20:47:37 · 344 阅读 · 0 评论 -
INT_MIN和INT_MAX溢出问题
C中int类型32位,范围是-2147483648到2147483647. (1)最轻微的上溢是 INT_MAX + 1 :结果是INT_MIN。 (2)最严重的上溢是 INT_MAX + INT_MAX :结果是-2。 (3)最轻微的下溢是 INT_MIN - 1 :结果是INT_MAX。 (4)最严重的下溢是 INT_MIN +INT_MIN :结果是 0。 应原创 2013-12-19 20:47:31 · 465 阅读 · 0 评论 -
typedef与define
原文地址:typedef与define作者:君临天下1.基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。 至于typedef有什么微妙之处,请你接转载 2013-12-19 20:47:01 · 307 阅读 · 0 评论 -
整数溢出,如何判断整数溢出
c语言中存在两类整数算术运算,有符号运算和无符号运算。在无符号运算里,没有了符号位,所以是没有溢出的概念的。所有的无符号运算都是以2的n次方为模。如果算术运算符的一个操作数是有符号书,另一个是无符号数,那么有符号数会被转换为无符号数(表示范围小的总是被转换为表示范围大的),那么溢出也不会发生。但是,当两个操作数都是有符号数时,溢出就有可能发生。而且溢出的结果是未定义的。当一个运算的结果发生原创 2013-12-19 20:46:58 · 784 阅读 · 0 评论 -
dynamic_cast介绍
dynamic_cast(expression)这个表达式将 expression 转换为一个 type-id 类型的对象。 Type-id 必须是一个指针、指向一个已经定义类的类型或一个指向 VOID的指针。 Expression 的类型必须是一个指针,如果 type-id 是一个指针;当 type-id 是一个引用的时候必须是一个左值。如果 type-id 是一个到 expressi原创 2013-12-19 20:46:52 · 295 阅读 · 0 评论 -
C++访问控制-三种继承方式
不同继承方式的影响主要体现在:1、派生类成员对基类成员的访问控制。2、派生类对象对基类成员的访问控制。三种继承方式:1、公有继承(public)① 基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可访问。② 派生类中的成员函数可以直接访问基类中的public和protected成员,但不能访问基类的private成员。③ 通过派生类原创 2013-12-19 20:46:50 · 423 阅读 · 0 评论 -
linux中字符串转换函数 simpl…
Linux内核中提供的一些字符串转换函数:lib/vsprintf.c [html] viewplaincopyprint? 1. unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) 2. unsigned long simple_st原创 2013-12-19 20:53:07 · 481 阅读 · 0 评论 -
指针数组 与数组指针
#define MAX 10 char* ch1[MAX];// max个字符串 (指针数组)(char*) ch2[MAX];//错误 在vc6上编译不过char (* ch3)[MAX];//含有MAX个字符的指针;即数组指针 ch3=(char (*)[12])malloc(12); or ch3 = &ch1; ch1={"hello","wo原创 2013-12-19 20:41:16 · 303 阅读 · 0 评论 -
深入理解指针函数
1.指针函数的定义 顾名思义,指针函数即返回指针的函数。其一般定义形式如下: 类型名 *函数名(函数参数表列); 其中,后缀运算符括号“()”表示这是一个函数,其前缀运算符星号“*”表示此函数为指针型函数,其函数值为指针,即它带回来的值的类型为指针,当调用这个函数后,将得到一个“指向返回值为…的指针(地址),“类型名”表示函数返回的指针指向的类型”。原创 2013-12-19 20:41:18 · 304 阅读 · 0 评论 -
C++编程方面的优秀书目
作者:gfree.wind@gmail.com博客:blog.focus-linux.net以下是我阅读后,认为优秀的书目《C++Primer》《C++程序设计语言》《C++标准程序库》《Effective C++》《More Effective C++》《C++编程思想》2卷《STL高效编程》《STL源码分析》《Excep原创 2013-12-19 20:48:52 · 446 阅读 · 0 评论 -
为何C语言(的函数调用)需要堆栈…
为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈之前看了很多关于uboot的分析,其中就有说要为C语言的运行,准备好堆栈。而自己在Uboot的start.S汇编代码中,关于系统初始化,也看到有堆栈指针初始化这个动作。但是,从来只是看到有人说系统初始化要初始化堆栈,即正确给堆栈指针sp赋值,但是却从来没有看到有人解释,为何要初始化堆栈。所以,接下来的内容,就是经过一定的探究,试图原创 2013-12-19 20:48:18 · 656 阅读 · 0 评论 -
一些经典的计算机书籍
以下列表中的计算机书籍(中文版)来自微博:@程序员的那些事 粉丝的推荐。按推荐次数,从高到低往下排。如果大家还有其他计算机相关的经典书籍推荐,请在评论中留言,或者在这条微博的评论中留言,我们将继续扩充这个列表。算法导论(第2版)代码大全(第2版)C++ Primer中文版(第4版)设计模式:可复用面向对象软件的基础浪潮之巅Java编程思想(第4版)Jav原创 2013-12-19 20:48:07 · 339 阅读 · 0 评论 -
C语言 地址相减
举一个小例子说明一下,C中地址相减的结果是比较有趣的。例:int a[3];int *s1,*s2;char *t1,*t2;a[0]=1;a[1]=2;a[2]=3;s1=a;s2=&a[2];s2-s1=?t1=(char*)a;t2=(char*)&a[2];t2-t1=? 解析: s2-s1=2; t2-t1=8;why? C语言中的地址相减,其实并不是,我们原创 2013-12-19 20:47:57 · 1848 阅读 · 0 评论 -
C语言异或操作的妙用
如果想要交换2个变量,一般的做法是引入第三个变量, 例如, [cpp] viewplaincopytemp = a; a = b; b= temp; 这样2个变量中的值就实现了交换。那能不能不引入其他变量就可以实现变量值的交换呢?答案是肯定的。用异或操作可以实现,有2种实现方法,本质上是一样的。法1: [cpp] vi原创 2013-12-19 20:47:49 · 544 阅读 · 0 评论 -
宏定义
宏定义宏定义是C提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。1.不带参数的宏定义:宏定义又称为宏代换、宏替换,简称“宏”。 格式: #define 标识符 字符串 其中的标识符就是所谓的符号常量,也称为“宏名”,字符串可以是常数、表达式、格式串等。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏原创 2013-12-19 20:47:41 · 479 阅读 · 0 评论 -
位域
使用位域的主要目的是压缩存储,其大致规则为: 1)如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止; 2)如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍; 3)如果相邻的位域字段的类型不同,则各编译器的具原创 2013-12-19 20:47:39 · 310 阅读 · 0 评论 -
链表合并
(2)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)Node * Merge(Node *head1 , Node *head2){if ( head1 == NULL)return head2 ;if ( head2 == NULL)return head1 ;Node *head = NULL ;Node *p1原创 2013-12-19 20:47:35 · 302 阅读 · 0 评论 -
带环链表求环的起点
很经典的问题了,求环的长度可以用两个步长分别为1和2的指针遍历链表,直到两者相遇,此时慢指针走过的长度就是环的长度。另外相遇后把其中指针重新设定为起始点,让两个指针以步长1再走一遍链表,相遇点就是环的起始点。 证明也很简单,注意第一次相遇时慢指针走过的路程S1 = 非环部分长度 + 弧A长快指针走过的路程S2 = 非环部分长度 + n * 环长 + 弧A长S1 * 2 = S2原创 2013-12-19 20:47:26 · 443 阅读 · 0 评论 -
带环的链表
原文地址:带环的链表作者:wRonSKy 单链表的问题在面试考试等等等等中频频上镜,大有赶上凤姐超越芙蓉之势。假若有一个蛋疼的程序猿把单链表的末尾结点的next指针指向了单链表中一个随机的结点上,那么我们经常写的一个循环while(p)或者while(p->next)就可以父传子子传孙子子孙孙无穷尽了。 话说怎么判断单链表是否带环了呢?大部分人都知道了:让快指针追慢指针,追上了就有转载 2013-12-19 20:47:24 · 454 阅读 · 0 评论 -
RTTI、虚函数和虚基类的开销分析及…
“在正确的场合使用恰当的特性” 对称职的C++程序员来说是一个基本标准。想要做到这点,首先要了解语言中每个特性的实现方式及其开销。本文主要讨论相对于传统C而言,对效率有影响的几个C++新特性。C++引入的额外开销体现在以下两方面:编译时开销模板、类层次结构、强类型检查等新特性,以及大量使用了这些新特性的C++模板、算法库都明显地增加了C++编译器的负担。但是应当看到,这些新机能在不增加原创 2013-12-19 20:46:54 · 553 阅读 · 0 评论 -
如何实现在类中定义真正的const成…
有时我们希望某些常量只在类中有效。由于#define定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用const修饰数据成员来实现。const数据成员的确是存在的,但其含义却不是我们所期望的。const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。 不能在类声明中初始化const数据成员。以下用原创 2013-12-19 20:46:46 · 341 阅读 · 0 评论 -
C代码优化方案 (转载下)
(6)、循环嵌套把相关循环放到一个循环里,也会加快速度。旧代码:for (i = 0; i for (j = 0; j a[i][j] = 0.0; for (i = 0; i < MAX; i++) a[i][i] = 1.0; 新代码:for (i = 0; i {原创 2013-12-19 20:45:19 · 401 阅读 · 0 评论 -
C代码优化方案 (转载上)
(2008-12-01 19:01)分类: LinuxProgramming目录__2C代码优化方案__41、选择合适的算法和数据结构__42、使用尽量小的数据类型__53、减少运算的强度__5(1)、查表(游戏程序员必修课)_5(2)、求余运算__ 6(3)、平方运算__ 6(4)、用移位实现乘除法运算__6(5)、避免不必要原创 2013-12-19 20:45:17 · 383 阅读 · 0 评论 -
定义C/C++全局变量/常量几种方法的…
在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINKERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌入式下做开发工作的话,那么你可能原创 2013-12-19 20:44:20 · 771 阅读 · 0 评论 -
静态类数据成员、const与类
每个对象的数据成员都是独立的,在内存中各自独立,但是对象的成员函数的创建和放置在内存中只有一个地方。一、静态类数据成员:前面说过每个对象包含它自己独立的数据,但是当数据项被声明为static后,不管存在多少对象,整个类只会创建一个这样的数据项。静态类数据成员与普通静态变量相同点:只在类中可见,但是生存周期与整个程序相同。即使没有了类的对象,他依然存在。不同点:普通的静态变量被用来在各个原创 2013-12-19 20:43:39 · 407 阅读 · 0 评论 -
enum类型的本质
至从C语言开始enum类型就被作为用户自定义分类有限集合常量的方法被引入到了语言当中,而且一度成为C++中定义编译期常量的唯一方法(后来在类中引入了静态整型常量)。 根据上面对enum类型的描述,到底enum所定义出来的类型是一个什么样的类型呢?作为一个用户自定义的类型其所占用的内存空间是多少呢?使用enum类型是否真的能够起到有限集合常量的边界约束呢?大家可能都知道原创 2013-12-19 20:46:48 · 372 阅读 · 0 评论 -
名书收藏
计算机经典书籍 1、Java Java编程语言(第三版)---Java四大名著----James Gosling(Java之父) Java编程思想(第2版)----Java四大名著----Bruce Eckel Java编程思想(第3版)----Java四大名著----------------Bruce Eckel JAVA 2核心技术 卷I:原创 2013-12-19 20:46:35 · 509 阅读 · 0 评论 -
肤色检测
3 3.1 各彩色空间中肤色[1]的聚类情况 好的肤色模型要求选择一个恰当的彩色空间,在此空间中肤色能团簇、聚合在一起,并且与非肤色的重叠部分要尽可能少。通过各色度空间中肤色聚类的结果比较发现,肤色在各空间中的聚类情况如下:在RGB彩色空间中,肤色与非肤色的重叠部分较多。因此RGB空间不适合构造肤色模型;在rgb彩色空间中的分布情况(用r,g表征)。由于色饱和度没有被分离出来,rgb原创 2013-12-19 20:43:14 · 5135 阅读 · 0 评论 -
计算程序运行时间
写的全面的一篇还有一种int getitimer(int which, struct itimerval *value);int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);顺便转载一下,以备不时之需http://blog.chinaunix.net原创 2013-12-19 20:43:03 · 429 阅读 · 0 评论