C语言
咸鱼程序员
这个作者很懒,什么都没留下…
展开
-
令人头痛的代码
今天看到了一段令人头痛的代码,因为你完全不知道它的编译结果是什么。程序如下:int main(){int i = 1,a;a=(++i )+ (i++ )+(i++);printf("%d\n",a);return 0;}大致一看,这段代码没有错误,但大家知道编译结果是什么吗。有人会说8吗,有人会说’10吗,哈哈其实都不对,我也不知道是什么。因为它在不同的编译器...原创 2017-04-03 17:26:05 · 394 阅读 · 1 评论 -
结构体小结
1.结构体的定义对于结构体,他有一个神奇的关键字,struct,它将一些相关联的数据打包成一个整体,方便使用。在网络协议,通信控制,嵌入式系统,驱动开发等地方,我们经常要传送的不是简单的字节流,而是多种数据组合在一起的一个整体,其表现形式就是一个结构体。结构体的功能很强大,他可以将一个个零散的数据组合在一起,方便人们对它使用和编辑。通常将结构体的内容称之为结构体成员,在没有声明是私有的还是公有...原创 2017-07-09 14:09:25 · 238 阅读 · 0 评论 -
结构体和位段的大小计算
在介绍结构体和位段的大小计算方法之前,先来介绍内存对齐这个概念。为什么会有内存对齐?首先字,双字,四字在自然边界上不需要内存对齐。无论如何,为了提高程序的性能,数据结构应该尽可能的在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要做两次内存访问;然而,对齐的内存访问仅需要一次访问。缺省情况下,编译器默认将结构和栈中的成员数据进行内存对齐。编译器将未对齐的成员向后移,将每一个成...原创 2017-07-09 15:41:56 · 1296 阅读 · 0 评论 -
回调函数
首先介绍一下回调函数回调函数就是通过函数指针调用的函数。函数指针,即指向函数的指针,所指向的内容为函数,所存储是函数的入口地址。当把函数的指针(地址)作为参数传递给另外一个函数,就称为回调函数。下面利用qsort函数简单感受一下回调函数。qsort函数的原型为 void qsort(void*base,int size_t num,int size_t width,int (com...原创 2017-07-19 09:24:25 · 278 阅读 · 0 评论 -
模拟实现qsort函数
上节提到qsort函数的原型,今天我们就来模拟下它首先是qsort函数的主体部分,主要还是循环,判断比较,较困难的是类型的转化,我们希望可以知道每次访问的字节数,即将初始地址转化为字符指针,即每次解引用可访问一个字节,而再加上j*width就可以知道访问第几个元素,这样就可以方便的比较了。void bubble_qsort(void *base, int num, int width, i...原创 2017-07-19 11:18:38 · 303 阅读 · 0 评论 -
模拟atoi函数,从字符串到数字的转化
atoi函数是将字符串转化为数字,这个函数可以面对任何错误的情况,是个强大的函数。今天我们就来模拟下它。(1)考虑指针为空的情况assert(str != NULL);(2)考虑字符串为空的状况if (*str == '\0'){return state;}state 是定义的一个全局变量,用来判断是否合法,首先赋值为不合法。(3)考虑字符串前面是空白字符的情况,可以...原创 2017-07-26 22:29:29 · 393 阅读 · 0 评论 -
利用命令 行参数实现小型简单计算器
对于任意一个函数都有参数,这点没有人会否认的,可能有人会说有的函数没有参数,但是那是void型的参数。当然main函数也不例外。main函数的原型是 int main(int argc,char *argv[ ],char *envp[ ]).其中,argc是包括文件名在内的命令行参数的总个数。 char *argv[ ]是一个指针数组,数组的每个元素都是字符指针或者字符串(...原创 2017-07-28 15:42:06 · 789 阅读 · 0 评论 -
简易计算器的实现
今天就是用一种较难的方式实现计算器了大家看代码吧 int add(int a, int b){ return a + b;}int sub(int a, int b){ return a - b;}int mul(int a, int b){ return a * b;}int dev(int a, int b){ return a / b;}char...原创 2017-07-28 16:21:00 · 379 阅读 · 2 评论 -
利用可变参数实现求平均值
今天先来看一段代码,这段代码巧妙的使用了可变参数,在传参数的时候,第一个实参代表了要计算的数的个数,接下来的参数都是要计算的数。而在形参部分,只需一个参数 就可以搞定了,这个参数是接下来代码的关键入口位置。 #include <stdio.h>int Average(int n, ...){ int i = 0; int sum = 0; va_lis...原创 2017-07-30 12:26:32 · 824 阅读 · 0 评论