C
_Taoshi_
stay hungry, stay foolish
展开
-
C语言编程细节之n=-n的问题
我相信在C编程的时候都会遇到过这样一段类似的代码:int n;...if (n < 0) n = -n;...乍一看没有什么问题,其实在里面隐藏了一个玄机:n会溢出!为什么呢?因为n是一个有符号整型,可以表示的范围是(假设这台机器int字长为4)-2^32~2^32-1,负数表示的范围比正数要大1,所以如果n为负,在执行n=-n的过程中就可能出现溢出的情况。解原创 2018-01-24 01:27:29 · 2292 阅读 · 0 评论 -
C语言小心使用realloc函数
原文地址:编写安全代码:小心使用realloc原文作者:gfree.wind@gmail.com编写安全代码,小心使用realloc在良好的代码风格中,其中有一项要求就是,一个函数只做一件事情。如果该函数实现了多个功能,那基本上可以说这不是一个设计良好的函数。今天看C库中的函数realloc。其原型是void *realloc(void转载 2018-01-24 01:39:56 · 1233 阅读 · 0 评论 -
C语言里函数指针的两种常见用途(回调函数与转移表)
在《C和指针》这本书里,我看到了两种C函数指针的常见用法,所以将它整理出来 。函数指针虽然我们不是每天都会用到它,但它的确有它的用武之地:1. 回调函数在单链表的查找中,会遇到由于要查找的数据类型不同导致需要编写不同类型的查找函数,所以为了方便,这里运用回调函数法。1.1 查找函数/*使用回调函数法,将比较函数作为一个函数指针进行参数传递,达到只用编写一个查找函数,通过编写原创 2018-01-07 20:46:23 · 2523 阅读 · 0 评论 -
C中二级指针与它指向的一级指针之间的秘密(深入++*pptr)
C语言里二级指针的意思是指向指针的指针,一级指针就是普通的指针,一个二级指针一定是对应着一个一级指针,那么二级指针和这个它对应的一级指针之间有什么秘密呢?1. 首先明白在二级指针使用中 ++*pptr 与 *pptr++ 之间的区别首先申明一下,这里的pptr和标题中的一样,都代表着指向指针的指针,是一个二级指针,所以用了两个'p'来表示嘛。接下来看下面的代码:int ma原创 2018-01-08 22:52:23 · 721 阅读 · 1 评论 -
C语言中联合(union)的一个有意思的用途
联合(union)在许多其他语言中称作变体记录(variant record),在联合中 ,所有的成员都从偏移地址零开始存储,这样,每个成员的位置都会重叠在一起。 按照这种特性,联合可以把同一个数据解释成两种不同的东西,而不是把两个不同的数据解释为同一个东西,该用法的例子如下: union bits32_tag { int whole; //一个32位的值 s...原创 2018-03-15 22:00:46 · 2506 阅读 · 0 评论 -
C语言中typedef和define的区别
正确思考typedef和宏文本替换直接的区别关键在于就是把typedef看成一种彻底的“封装”类型——在声明它之后不能在里面增加别的东西。它和宏的区别主要体现在两个方面。 一、可以用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名却不能这么做:#define peach intunsigned peach i; /*没问题*/typedef int banana...原创 2018-03-19 22:05:46 · 1215 阅读 · 0 评论