
C
「已注销」
这个作者很懒,什么都没留下…
展开
-
c语言文件操作 fread(),fseek()
1.fread()fread的功 能: 从一个流中读数据(可以指定个数)fread 在使用过程中,首先由 FILE 确定一个文件指针 fp,fp 通过 fopen 将对象确定,fread此时对文件的操作是文件内部位置指针移动一个字节再读取一个字节注意的是:1.fread()函数是有返回值的返回值:(1)成功时返回实际读入的元素个数(2)若文件达到原创 2014-12-03 15:50:12 · 7301 阅读 · 1 评论 -
位操心常见经典用法
位操作包括: 与 & 或 | 非(取反)~ 异或 ^ 左移 << 右移 >> 使用位操作实现常用功能1 快速判断偶数,判断最低位是0还是1即可,比求模运算快 x%2 != 0 // x正负都可以判断;不能用x%2 == 1,因为如果x为负奇数,x%2=-1 x&0x1 == 0 //最好最快的方法,使用与正负数都可 2 交换两个数,不用原创 2016-06-05 11:03:59 · 1577 阅读 · 0 评论 -
char data[0]在struct末尾的用法
今天在看一段代码时出现了用结构体实现变长数组的写法,一开始因为忘记了这种技术,所以老觉得作者的源码有误,最后经过我深思之后,终于想起以前看过的用struct实现变长数组的技术。下面是我在网上找到的一篇讲解很清楚的文章。在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组。此时,我们可以使用结构体的方法实现C语言变长数组。struct MyData { int nLen; char原创 2016-03-12 08:00:20 · 3847 阅读 · 0 评论 -
为啥要用(++i)分析++i和i++在效率上的区别
++i相当于下列代码 i += 1; return i; i++总是要创建一个临时对象,在退出函数时还要销毁它,而且返回临时对象的值时还会调用其拷贝构造函数。i++相当于下列代码 j = i; i += 1; return j; ++i返回对象的引用;效率更高在内建数据类型的情况下,当然如果编译器会将这些差别都优化掉,那么效率就都差不多了。在自定义数据类型的原创 2016-03-19 21:27:08 · 763 阅读 · 0 评论 -
for循环用效率分析(++和--时效率的差异分析)
(听别人说的面试中问过的一个问题,记不清了,如有偏差希望大家补充纠正) 问题:完成相同的功能,for循环使用++和–哪个效率更高?通常我们在编写需要for循环实现的程序时有两种实现方法:for(int i = 0;i<arr.length;i++)for(int i = arr.length-1;i>=0;i--)分析: 结论:通常来讲第2种用–的方法效率更高 原因如下:原创 2015-11-10 07:56:22 · 5004 阅读 · 1 评论 -
技术学习网站收藏推荐(CodeProject , MSDN 等)
1.CodeProject : http://www.codeproject.com/非常喜欢它的口号:CodeProject ,for those who code 。主要是开源代码,上面有很多高手写好的代码可以借鉴,CodeProject侧重于应用。2.MSDN主要是开发文档,技术文章和函数使用示例代码,开发工程中遇到不懂得函数之类的可以及时到MSDN查询,MSD原创 2015-08-02 18:47:53 · 1642 阅读 · 0 评论 -
存储单位介绍:位、字节、(字)机器字长 捋顺他们的关系
真实看着看着就晕了,还是自己没有完全弄清楚,特此整理。从小到大讲解:1. 位 bit :最小的存储单位(可以容纳0和1其中之一)2. 字节 byte :常用的计算机存储单位。1字节 = 8 位(这是字节的标准定义)3 字 word :即机器字长,是自然的存储单位。计算机是多少位的,一个字就又多少位。(如64位的机器,一个机器字长就是64位)原创 2015-08-01 09:14:25 · 3800 阅读 · 0 评论 -
register 寄存器变量
之前竟然没听过c语言还有寄存器,好可怜,我是小白请见谅,哈哈简单总结了几条关于register变量应该知道的东西,如下:1.寄存器变量可以用来优化加速c语言程序2.声名只需在类型前多加register 即可,eg register int quick; (quick 就是一个整形的寄存器变量)3.register只是一个建议型关键字,能不能声名成功还取决于编译器(建议型的关原创 2015-07-05 22:28:28 · 5769 阅读 · 1 评论 -
#ifdef 条件编译,其实如此简单
今天看一个问题:怎么消灭头文件被多次include导致的错误?解决就是要用到条件编译,关于怎么解决“头文件被多次include导致的符号重定义错误”参考bloghttp://bbs.youkuaiyun.com/topics/350119699以下只介绍条件编译,内容如下: 这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部原创 2015-03-21 16:28:28 · 6530 阅读 · 0 评论 -
堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出
报错:0x000CC3C9 处有未经处理的异常(在 image_opencv2.exe 中): 堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出。主要检查代码中有没有对数组的越界操作,就解决了这个bug.其它的相关知识查后再补充。原创 2015-05-27 22:06:27 · 31715 阅读 · 1 评论 -
指针的点运算和箭头运算(->)
指针的点运算和箭头运算(->)突然发现指针的两个运算符我是不太清楚的,就翻书搞了下:其实点运算和箭头运算都是访问指针所指向的 结构体或者类对象的成员是用的操作符。比如:struct song{int a;}有这样一个结构体,定义:song s;s.a=1;song *p;p=&s;那么要访问指针p所指向的内存:(*)p.a 和 p->a原创 2015-05-27 20:03:27 · 7418 阅读 · 1 评论 -
c/c++中头文件和源文件的关系
.h为头文件,.c/.cpp为源文件首先:.h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明,一般只有声名,而具体的实现放在源文件中。要将a.cpp和a.h对应起来,就必须在a.cpp中写上#include"a.h",这样编译器才会把a.h和a.cpp两个文件绑定在一起。其次:要了解细节的东西,我们先要清楚译器的工作过程,一般说来编译器原创 2015-03-21 10:12:58 · 3149 阅读 · 0 评论 -
memset()用法小结
memset()的用途:1.用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘memset(a,'\0',sizeof(a));ps:memset()是对其指向的内存按字节进行赋值的,如果对int型内存进行赋值 memset(array,1,5*sizeof(int)); 结果就是168430091684300916843009168430091684300原创 2015-03-20 19:42:06 · 853 阅读 · 0 评论 -
C语言运算符优先级 之 快速记忆
先摘录谭浩强《C程序设计》对运算符优先级的两点说明:1. 同一优先级的运算符,运算次序由结合方向来决定。 例如: a) * 与 / 具有相同的优先级别,其结合方向为自左向右,因此3 * 5 / 4的运算次序是先乘后除; b) - 和 ++ 为同一优先级,结合方向为自右向左,因此 - i ++ 相当于 - ( i ++ )。2. 从上述表中可以大致归纳出各类运算转载 2016-07-08 08:04:49 · 623 阅读 · 0 评论