C Program
文章平均质量分 76
myself659
这个作者很懒,什么都没留下…
展开
-
什么是好的程序员?
<br />什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。<br />我认为好的程序员应该有以下几方面的素质:<br /> 1、有专研精神,勤学善问、举一反三。<br /> 2、积极向上的态度,有创造性思维。<br /> 3、与人积极交流沟通的能力,有团队精神。<br /> 4、谦虚谨慎,戒骄戒燥。<br /> 5、写出的代码质量高。包括:代码的稳定、易读、规范转载 2010-08-08 16:36:00 · 164 阅读 · 0 评论 -
数组与链表的比较
<br />1。<br />数组只能支持固定长度的,<br />而链表可以支持动态长度的数组,使用灵活,<br />在增加或删除一个元素,数组会对数组中元素进行移动,<br />当数组长度超过时,会造成bug,<br />数组长度不够时却造成空间的浪费。<br /> <br />另外 链表可以实现双向。<br />2.<br />从存储上看,链表不一定是整块分布在内存,内存使用自由度高<br />数据却是一整块分布在内存上,创造 与释放方便。<br /> <br />A 从逻辑结构来看<br />A-1.数原创 2011-03-12 10:29:00 · 292 阅读 · 0 评论 -
程序调试中遇到的几种问题
<br />1。无限等待signal<br />有线程1和线程2,线程1结束前需要等待线程2发送signal,才能结束。<br />结果线程1还未进入等待signal的时候,线程2已经发送signal完毕,造成线程1无限等待signal,程序陷入死循环。<br />2。相互等待signal<br /> <br />线程1发送消息(往消息队列写入), 线程2接收消息(从消息队列读取),线程3处理消息命令,线程4负责播放状态切换。<br />线程2如果收到消息,发送给线程3,只有线程3处理完毕才能处理下一个消息转载 2011-03-12 10:48:00 · 314 阅读 · 0 评论 -
Linux 下用gdb单步调试多进程方法
<br />当你在程序中使用fork(),如果用gdb来调试.不管是你在子进程是否设置断点.你都只能在父进程单步调试,而没办法进入到子进程当中进行单步调试.因为gdb的所有处理(查看堆栈,内存,变量值)都是针对当前进程空间.<br />那么是否就没办法调试多进程程序的子进程代码呢?办法还是有的,一般的标准方法是再打开一个gdb用attach功能来调试子进程.gdb attach 功能是不执行被调试程序,而是把gdb“挂”到一个已经运行的进程之上来进行调试,这挂载的动作称为attach.当然也包括挂载子进程。转载 2011-03-20 22:03:00 · 369 阅读 · 0 评论 -
函数返回值—返回局部变量
<br />看看下面的程序的输出: <br /><br />#include <stdio.h> <br />char *returnStr() <br />{ <br />char *p="hello world!"; <br />return p; <br />} <br />int main() <br />{ <br />char *str; <br />str=returnStr(); <br />printf("%s/n", str); <br />return 0; <br />} <br /原创 2011-05-08 21:27:00 · 147 阅读 · 0 评论 -
将一个浮点数转为一个精度为jd的字符串,存于s中
<br /><br />/*----------------------------------------------------<br /> <br />函数名:ftoa()<br /> <br />功能 :将一个浮点数转为一个精度为jd的字符串,存于s中<br /> <br />作者 :于振南<br /> <br />------------------------------------------------------*/<br /> <br />int ftoa(float dat,char原创 2011-03-19 17:17:00 · 232 阅读 · 0 评论 -
由extern C 想到
引言<br />在用C++的项目源码中,经常会不可避免的会看到下面的代码:view sourceprint?1#ifdef __cplusplus2extern"C"{3#endif4 5/*...*/6 7#ifdef __cplusplus8}9#endif<br />它到底有什么用呢,你知道吗?而且这样的问题经常会出现在面试or笔试中。下面我就从以下几个方面来介绍它:1、#ifdef _cplusplus/#endif _cplusplus及发散2、extern "C"2.1、extern关键字2转载 2011-03-23 21:10:00 · 157 阅读 · 0 评论 -
c/C++笔试题总结
<br />1.new 、 delete 、 malloc 、 free 关系 <br />delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数。 malloc 与 free 是 C++/C 语言的标准库函数, new/delete 是 C++ 的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于 mallo原创 2011-04-01 22:38:00 · 703 阅读 · 0 评论 -
C语言笔试大全
<br />4. static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性在特定时间内完成特定的任务,实时性与可靠性 9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别?全局变量储存在静态数据库,局部变量在堆栈 10. 什么是平衡二叉树?左右子树都是平衡二叉树转载 2011-04-05 15:42:00 · 325 阅读 · 0 评论 -
内存相关的一些知识
<br />内存分配(malloc/realloc/calloc区别)<br /> <br />void* realloc(void* ptr, unsigned newsize);<br />void* malloc(unsigned size);v<br />void* calloc(size_t nelem, size_t elsize);都在stdlib.h函数库内。<br /> <br />C语言的标准内存分配函数:malloc,calloc,realloc等。<br /> <br />mallo转载 2011-04-05 15:44:00 · 138 阅读 · 0 评论 -
想搞个链表的面试题专题
<br /> <br />最近的面试,总是会碰到链表的相关题目。<br />先规划一下。<br />单链表类:<br />1,创建<br />2,插入<br />3,倒序<br />4,排序<br />5,查找环<br />6,删除<br />7,两个合并<br />8,统计链表的元素个数<br /> <br />双向链表类:<br />1,创建<br />2,插入<br />3,删除<br />4,两个合并<br />5,统计链表的元素个数原创 2011-05-25 21:26:00 · 142 阅读 · 0 评论 -
链表面试题之有环链表问题
链表面试题之有环链表问题作者: cnyao 来源: 博客园 发布时间: 2009-11-26 21:41 阅读: 1291 次 原文链接全屏阅读[收藏]<br />链表在面试中出现的频率很高,有的比较正常,考链表的常规操作,主要看基本功是否扎实,有些就比较难,难在思维的改变和是否能够想到对应的点。这里出现的是其中一个题目,我称之为有环链表问题。也就是从判断一个单链表是否存在循环而扩展衍生的问题。下面来看问题如何解决。<br />首先来看最基本的这个问题:如何判断一个单链表是否存在循环,链表数目未知。算法不能转载 2011-05-25 21:09:00 · 174 阅读 · 0 评论 -
define 与 const 比较
然他们在使用中感觉“差不多”,但是他们在实现上有什么区别?请看下面的代码:#define T 13 /*用#define定义的一个常量T*/int main(){ const int t=13;/*用const定义的一个常量*/ int n=t;/*把t赋值给n*/ int m=T;/*把T赋值给m*/}1.差别:const与#define最大的差别在于:前者在堆栈分配了空间,而原创 2011-06-16 17:05:00 · 203 阅读 · 0 评论 -
内存碎片
<br />内存碎片是一个很棘手的问题。如何分配内存决定着内存碎片是否会、何时会、如何会成为一个问题。<br /><br /> 即使在系统中事实上仍然有许多空闲内存时,内存碎片还会最终导致出现内存用完的情况。一个不断产生内存碎片的系统,不管产生的内存碎片多么小,只要时间足够长,就会将内存用完。这种情况在许多嵌入式系统中,特别是在高可用性系统中是不可接受的。有些软件环境,如 OSE 实时操作系统已经备有避免内存碎片的良好工具,但个别程序员做出的选择仍然会对最终结果形成影响。<br /><br /> “碎片原创 2011-04-30 14:21:00 · 264 阅读 · 1 评论 -
数据结构(严蔚敏)二叉树的二叉链表存储表示
<br />#include "stdafx.h"<br /><br /> /* #define INT /* 整型(二者选一) */<br /> #include<string.h><br /> #include<ctype.h><br /> #include<malloc.h> /* malloc()等 */<br /> #include<limits.h> /* INT_MAX等 */<br /> #include<stdio.h> /* EOF(=^Z或F6),NULL */<br /> #incl转载 2011-05-04 21:12:00 · 885 阅读 · 0 评论 -
分析四道内存题
<br />关于内存的4个经典题目GetMomery<br />void GetMemory(char *p)<br />{<br /> p = (char *)malloc(100);<br />}<br /><br />void Test(void) <br />{<br /> char *str = NULL;<br /> GetMemory(str); <br /> strcpy(str, "hello world");<br /> printf(str);<br />原创 2011-03-13 13:44:00 · 214 阅读 · 0 评论 -
风雨20年:我所积累的20条编程经验
<br />从11岁时,我就一直在编程,并且一直都很喜欢技术和编程。这些年来,我积累了一些艰难又容易的经验。作为一名程序员,你或许还没这些经验,但我会把它们献给那些想从中学到更多的朋友。<br />我会持续更新这些经验,我可能还会有更多的感想,但就我这20年来看,我想下面这个列表中基本不需要增添额外的东西了。下面就是我至今最难忘的经验。<br />1. 估算解决问题所需要的时间。不要怕,承认吧!我曾见过一些程序员为了解决一个特殊问题而坐在显示器前面8小时。为自己定一个时间限制吧,1小时、30分钟或甚至15分转载 2010-11-14 14:15:00 · 121 阅读 · 0 评论 -
大项目、小项目都是程序员成熟之道
<br />一下子就跨到了新年,时间真快呀!言归正传,今天谈谈项目问题。<br /> 我们常听到同行说自己做过什么项目,说某某做过什么项目。一谈到项目就会眉飞色舞,兴高采烈。而不少新进单位的新大学生、一些编程新手,往往不知道什么项目,不知道项目与自己成长的关系,有的甚至声称编程好几年了,还都没有做过项目的经历。情况确实如此,只有参加过项目的程序员才是真正的程序员。那些没有做过项目的虽然自己编制了不少程序,虽然得意过自己的程序,但是,毕竟和做过项目的程序员有很大的差别,这些差别主要在于:<br /> 1、 程转载 2010-11-11 22:05:00 · 122 阅读 · 0 评论 -
毕业大学生找工作C++资料之面试问答题整理(1)
<br />1.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?<br />答:首先,extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。<br />通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。extern "C"是连接申明(linkage declaration),被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。作为一种面向对象的转载 2010-09-15 20:24:00 · 672 阅读 · 0 评论 -
程序存储空间分布总结
<br />--------------- <br /> Heap | <br />--------------- <br /> Stack | <br />--------------- <br /> Const |(字符串常量通常放在data-const区中) <br /> data--Common| <br /> Data | <br />------------原创 2010-09-15 20:41:00 · 218 阅读 · 0 评论 -
数据区,代码区,堆栈区,操作系统堆栈
<br /> <br /> <br />堆和栈的区别<br />一、预备知识—程序的内存分配<br />一个由c/C++编译的程序占用的内存分为以下几个部分<br />1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。<br />2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。<br />3、全局区(静态区)(static)—,<br转载 2010-09-15 20:53:00 · 122 阅读 · 0 评论 -
用示例详解嵌入式linux上C语言最易出现的10个连接错误13482100207 [转载]
用示例详解嵌入式linux上C语言最易出现的10个连接错误13482100207 [转载]<br />连接错误示例<br /><br /> 连接过程中常见的错误是符号未找到(undefined reference)和符号重定义(redefinition)。由于在编译器在处理各个符号的时候,已经没有了各个C语言源文件的概念,只有目标文件。因此对于这种错误,连接器在报错的时候,只会给出错误的符号的名称,而不会像编译器报错一样给出错误程序的行号。<br /><br /> 符号未定义的错原创 2010-09-04 22:13:00 · 380 阅读 · 0 评论 -
约瑟夫环问题(Josephus)
<br />继续笔试准备ing……分享一下昨天做到的其中一题,其实题目很老,也做过n遍了,但复习起来也是颇有韵味,同时还发现另一种妙解,感觉不错的。<br />问题描述:<br /> 约瑟夫环问题(Josephus)<br /> 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。(约瑟夫环问题 Josephus)<br />解法一(My Solution):<br /> 思想:建立一个有N个元素的循环链表,然后从链表头开始遍历并记数,如果转载 2010-09-05 15:04:00 · 223 阅读 · 0 评论 -
[C/C++]指针详解
复杂数据类型与指针<br />一、复杂类型说明<br />要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:<br />从变量名处起,根据运算符优先级结合,一步一步分析.<br />下面让我们先从简单的类型开始慢慢分析吧:<br />int p; //这是一个普通的整型变量<br />int *p; //首先从P 处开始,先与*结合原创 2010-09-04 21:56:00 · 141 阅读 · 0 评论 -
顶级程序员的心得
<br />读了 “Coders at Work”, 对15 位顶级程序员的采访, 总共600页。 从采访的模式看,有点像“艺术人生”, 一般都是音乐起,讲小时候的故事,你怎么开始写程序的? (Brad 同学 5 岁开始写) ; 不过后来并没有神秘嘉宾上场,也没有声泪俱下的宣泄。 无论如何, 这些看似冗长的问答中有不少精辟的言论。 我摘录了一些关于挑选,面试程序员,优秀程序员的特点,和程序设计的句子。下面是这些程序员的心得,和我的几句解释:<br />Coder <br /> What they sa转载 2010-12-01 18:23:00 · 179 阅读 · 0 评论 -
vim使用指导
<br />1.移动光标<br /> 在当前行里面有效的移动光标,注意这些字母都可以配合删除、移动等操作。<br />fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用 ; 来重复你的上一个 f 命令。<br />tx:和上面的命令类似,但是是移动到 x 的左边一个位置。(这真的很有用)<br />Fx:和 fx 类似,不过是往回找。<br />:jumps 看你过去移动光标的历史<br />% 跳转到配对的括号去<br />[[ 跳转到代码块的开头去(但要求代码块中'{转载 2010-12-06 20:53:00 · 188 阅读 · 0 评论 -
常用算法
<br />下面是一些比较重要的算法,原文罗列了32个,但我觉得有很多是数论里的,和计算机的不相干,所以没有选取。下面的这些,有的我们经常在用,有的基本不用。有的很常见,有的很偏。不过了解一下也是好事。也欢迎你留下你觉得有意义的算法。(注:本篇文章并非翻译,其中的算法描述大部份摘自Wikipedia,因为维基百科描述的很专业了)<br /><br />A*搜寻算法<br /><br />俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的原创 2010-10-20 23:56:00 · 230 阅读 · 0 评论 -
C语言的变量的作用域和生存期
<br />一、c程序存储空间布局<br /> C程序一直由下列部分组成:<br /> 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;<br /> 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。<br /> 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。<br /> 4)栈——增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)。<br /> 5)转载 2010-12-13 20:15:00 · 169 阅读 · 0 评论 -
好程序的十大良好习惯
<br />1.积极解决每一个问题<br />2.写代码之前成竹在胸,这样的话你思路清晰,才能更大程序保证实际情况与你所想的一致。<br />3.透过现象看本质,抓住最重要的事情<br />未完待续原创 2010-12-18 16:49:00 · 127 阅读 · 0 评论 -
vi/vim使用进阶: 目录
<br /> 06vi/vim使用进阶: 目录Easwy添加评论<br />本系列文章,是原来我在CSDN的Easwy专栏撰写的”使用VIM开发软件项目”系列。Easwy的博客搬家以后,就把CSDN上的文章全部移到此处。 <br />写本系列文章的最初想法,是介绍如何用vi/vim开发软件。但纵观整个系列,讲述的其实和软件开发关系并不大,基本都在讲vim的使用技巧、vim的配置及vimrc、vim的命令和vim的插件。因此,把文章移到新站后,我把本系列的名字改为”vi/vim使用进阶”,希望大家一如既往的支转载 2010-12-26 19:04:00 · 194 阅读 · 0 评论 -
算法学习博客
<br />http://blog.sina.com.cn/s/articlelist_1580904460_0_1.html原创 2011-01-02 10:06:00 · 335 阅读 · 0 评论 -
浮点数存储问题
<br />我们说的浮点数包括单精度浮点数和双精度浮点数。<br />这里,我先拿单精度浮点数来解释你的问题。<br />单精度数,是指计算机表达实数近似值的一种方式。VB中,Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38 。<br />单精度存储格式<br /> 符号位S(sign) - 1bit <br转载 2010-11-09 17:57:00 · 185 阅读 · 0 评论 -
调试高手和编程高手
<br />业界总是有高手之说,高手成了程序员心中之偶像,成了程序员成长之目标。但是,现实中人们往往对自己所了解的程序员,很难认同为高手;人们反而对那些自己不了解的,甚至是道听途说的人会认作为高手了。高手,同武林高手一样,神秘之至。<br /> 许多程序员都有这样的经历:无论自己编写什么很短很短的程序,一般是很难一次就能通过编译的;通过编译的其功能还不一定是正确的。我在很早就注意这样现象了,开始的时候,我还不信这个邪,还试着编写程序看看自己能否一次能否编译成功,为这个事还和别人打过赌呢!这当然是年轻时做过的转载 2010-11-11 22:02:00 · 106 阅读 · 0 评论 -
内核中双向循环链表的学习
内核中双向循环链表的学习List_head 结构定义在include/linux/types.h中struct list_head { struct list_head *next, *prev;};其中仅包含两个指向相同结构的指针。原创 2011-09-02 23:12:28 · 351 阅读 · 0 评论