![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言编程
文章平均质量分 57
canlynet
喜欢编程,从事IT行业。
展开
-
学习标准IO需要注意的几个问题
一、注意缓冲类型:全缓冲、行缓冲和不带缓冲。1.标准出错流stderr通常是不带缓冲的。2.涉及终端设备的流,比如stdin,一般是行缓冲的。3.其它情况都是全缓冲。可以更改缓冲类型,通过setbuf和setvbuf函数。可以通过fflush冲洗输出流缓冲区,即将缓冲区内容写入文件中。fflush参数传递NULL时,表示将冲洗所有输出流。程序...2010-03-13 17:34:54 · 215 阅读 · 0 评论 -
分治法解决数据最大子段和的问题
有这么一段数据:int nums[] = {-8, 11, -4, 13, -9, -10};要求求出其中最大子段和,即其中某一连续的几个数据之和最大值,比如这段数据,显然是11+(-4)+13=20为答案。使用C程序实现的算法,属于分治法。思路是:从中间划开,下标0~5,中间位置(0+5)/2(整除) = 2,那么取0~2,3~5两段下标,递归求最大子段和,用这两个最大字段和,同从2下标...原创 2016-04-13 17:47:58 · 2868 阅读 · 0 评论 -
巧用位操作进行整除(高效计算)
最近连续看到两个利用位操作进行整除的代码,感觉特别好,做个笔记。第一个:某个数除以8(整形数据的整除)。int a = 9;int b = a >> 3 << 3; // int b = a / 9;第二个:#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(in...原创 2013-07-22 16:59:54 · 1942 阅读 · 0 评论 -
数据置零置一和翻转
利用逻辑或,可将需要的某几位置一:x = 0xabab;y = 0xff00;z = x | y;结果:z = 0xffab; 利用逻辑与,可将需要的某几位置零,使用逻辑与要注意变量占几个字节:x = 0xabab;y = 0xffffff00;z = x & y;结果:z = 0xab00;右移再左移也可以达到这个效果:z = x >&...原创 2013-07-19 11:06:38 · 354 阅读 · 0 评论 -
C语言之函数的参数传入顺序
调用约定(Calling Conventions)定义了程序中调用函数的方式。见:http://www.programlife.net/function-call-convention-styles.html c/c++语言默认使用cdecl调用约定。参数传递从右至左,主调函数负责在函数调用之后恢复堆栈指针,因此可以支持可变参数。#include <stdio.h>...原创 2013-07-17 17:28:03 · 934 阅读 · 0 评论 -
c读取bmp文件
源自:http://hi.baidu.com/prince_hyai/item/d328959f62360bc7b72531d3 注意该代码中直接读取文件头是错误的,struct结构体内存对齐并非在结构体末尾增加空间,而是在变量后面增加字节空间。比如:typedef struct { uint16_t bfType; // 位图文件的类型,必须为BM(1-2字节)uint32_t...原创 2013-07-15 17:44:51 · 140 阅读 · 0 评论 -
libjpeg用法
libjpeg是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。这个库由独立JPEG工作组维护。最新版本号是6b,于1998年发布。可以参考维基百科关于libjpeg的介绍http://zh.wikipedia.org/wiki/Libjpeg。libjpeg库的数据结构 用libjpeg库解码jpeg数据的时候,最重要的数据类型...原创 2012-03-01 11:32:13 · 1699 阅读 · 1 评论 -
strcmp和strncasecmp需要担心比较溢出的问题吗?
请看一段有冗余的代码:...int ifBQ = 0;while (*src != 0){ if (*(src+1) == '\0') // 冗余部分 break; if (strncasecmp(*content, "B?", 2) == 0) { ifBQ = 1; break; } if (strncasecmp(*content, "Q...2011-03-10 10:52:13 · 737 阅读 · 0 评论 -
线性表的链式存储——链表(带源码)
[size=medium][b]一、为什么要采用链式存储(链表)存在的意义[/b] [/size]为什么要采用链式存储: 与数组相比,链式存储(即链表)有如下两个优点: 1、数据元素的个数不确定,随时可能增减。采用固定大小的数组浪费空间。 2、方便排序,对于数组来说,每次插入一个元素都可能导致大量数据的移动。 有缺点吗: 与素族相比,链式存储有一个很大的缺点——读取数据! ...原创 2010-03-02 14:02:02 · 195 阅读 · 0 评论 -
struct结构体内的对齐问题
struct结构体由于包含了不同的数据类型,而数据结构类型之间存在占用空间大小的问题,比如char型占用1字节,short int占用2字节,int、long int、指针、float占用4字节、double占用8字节(windows和linux中)。但计算机系统对基本数据类型可能允许地址做出了限制,要求某种类型的对象必须是2、4或8的倍数(为了简化处理器和存储系统之间的硬件设计——可以节省至少1...原创 2010-01-30 14:12:21 · 89 阅读 · 0 评论 -
数组名与指针
数组名:代表一个数组的首地址;指针:指向某个变量的地址;注意使用上的区别:数组名相当于指针常量。指针则根据声明可以为指针变量。也就是说,指针变量的值可以改变,数组名指向地址不可能改变。注意运行时的区别:char *p="hello world"; char a[]="hello world"; 这两句话执行效果看上去差不多,但运行方式则有很大区别:p本身占据4字节的内存空间...2010-01-28 09:31:00 · 163 阅读 · 0 评论 -
动态规划法求背包装物品价值最大的问题
问题描述:假定背包的最大容量为W(千克),有N件物品,每件物品都有自己的价值和重量,将哪些物品放入背包中可使得背包内物品的总价值最大。假设:W = 10; N = 4;物品重量数组:weights[4] = {5, 4, 6, 3};物品价值数组:values[4] = {10, 40, 30, 50} 可参考网址:http://www.importnew.com/...原创 2016-04-01 17:20:50 · 1204 阅读 · 0 评论