编程实践
文章平均质量分 68
hilyoo
简单,实在。
展开
-
C语言之尾递归
昨天被问到了尾递归及编译器对它的处理相关,一直对它没有研究过,解释得很含糊。回来查了下,记录如下:递归有线性递归(普通的递归)和尾递归。由于尾递归的特殊性,一般的编译器会做些特殊处理。因此,在效率和开销上,比普通递归好。举个例子,计算n!1)线性递归:type recurve(long n){ return (n == 1) ? 1 : n * re原创 2009-08-14 10:13:00 · 13261 阅读 · 1 评论 -
C++的编程范式
”c++三人谈“中看到恶魔曾经指出c++的编程范式可以分为ADT+PP,GP,OO三个方向。1、ADT+PPADT:abstract data type; 抽象数据类型 PP:procedure programme; 面向过程的编程范式 ADT+PP 就是说面向过程的编程范式+抽象数据类型,你可以理解为c++的前身:带类的C。2、GPGP:泛型编程,GP(Gener原创 2009-09-24 23:15:00 · 16702 阅读 · 0 评论 -
C语言之struct参数传递与结构匹配
1、结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同:首先结构体可以在一个结构中声明不同的数据类型,;第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称可看作常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类原创 2009-08-19 23:25:00 · 17981 阅读 · 0 评论 -
C语言之struct大小、首地址与内存对齐
被问到如下问题:给定一个结构体中某个变量地址,可否得到结构体变量的地址?答案是可以,但是对不同的场合有不同的结果;这与微处理器平台、编译器的处理不可分割。首先,对于处理器,大尾端、小尾端的因素必须考虑;其次:一、ANSIC标准中并没有规定,相邻声明的变量在内存中一定要相邻。为了程序的高效性,内存对齐问题由编译器自行灵活处理,这样导致相邻的变量之间可能会有一些填充原创 2009-08-19 22:32:00 · 12691 阅读 · 1 评论 -
C语言之memcpy()函数
昨天被问了个很基础的C语言的问题。写出u8 * memcpy(u8 * src, u8 * dst, size_t len)的定义。比较紧张,以为要考虑很多东西;于是,将很多乱七八糟的情况考虑了下。一般写成void *,强制转换成8bit的类型。事实上,由于这里使用unsigned char型,不再需要强制转换了。src和dst是否为空,我用if判断。如果src空,则出错;原创 2009-08-17 13:13:00 · 10291 阅读 · 0 评论 -
C语言之IP排序
看到一个比较初级的问题,4个字段的ip,如何排序?分析:排序是按每个字段的整数值进行,而整个ip地址是字符串型,故需要逐个字段读取。注意到每个字段0~255,可以用一个字节表示,而要比较大小,故用unsigned char型。读取后,最自然的想法是逐个字段比较,依次比较4个字段,这个可以分别对每个字段调用排序。想到基数排序的原理,不妨以256作为基数实施基数排序原创 2009-08-14 09:35:00 · 8026 阅读 · 0 评论 -
C语言之extern作用于指针、数组
以下为测试环境:gcc 4.3.2-1-1GNU/Linux Debian 5.0(刚开始使用csdn博客,没经验。由于中间调试时间较长,忘了备份,刚写完,赶紧发了。一看,没有;再看,还是没有。挥去愤怒,重写一篇。望读者以此为鉴,及时备份。:-)1、extern与staticextern 对变量、函数声明;编译时可见,即告诉编译器:“老兄,虽然这个文件里,我没有定义,但在别原创 2009-08-08 13:54:00 · 7418 阅读 · 4 评论 -
《程序员面试宝典3》大量错误(50+)纠正表
《程序员面试宝典》第3版大量错误纠正表 以前随手翻了翻,想写这篇文章没有写,现在完整看了下就记录下来了。找工作的同学大部分都会看《程序员面试宝典》,本来看过去就可以了。但我还是要把自己记录的大量错误指出来,以免误人子弟。这本书错误漏洞百出,编辑质量太差。虽然它一版再版,一再流传,却没有一个勘误表,错误改了很多,还有很多依然存在。 因此提醒读者一定要自己动脑筋,否原创 2009-08-20 15:43:00 · 24520 阅读 · 9 评论