C
文章平均质量分 77
fang_chuan
打打杂啦
展开
-
C语言链表实战总结
近期项目里遇到瓶颈,我最后选择的方案是用链表解决又重新拾起了多年没用的链表。搞了一个星期,总算是把功能都实现了,并考虑了各种突发状况,基本上不会有程序挂掉的结果。不过过程中还是遇到了很多问题,这些问题在不断的翻书回顾中被解决。背景是这样的,要求在液晶显示屏上创建一个窗口,里面至少有200个EDIT控件,用户可以在EDIT控件上编辑一些特定的语句,然后点击”运行“按钮时,保存现有的EDIT的内容原创 2015-12-04 14:59:09 · 704 阅读 · 0 评论 -
寄存器变量小记
目前程序中的变量都是存放在内存中,CPU找到内存中的操作数,送入运算器的寄存器,计算完成后再送回内存。如果程序中一些变量使用简单而频繁,那么可以直接将这些变量直接放在寄存器中,则访问变量的速度与指令执行的速度同步,程序的性能得到提高。 寄存器变量就是用寄存器存储的变量,寄存器变量的定义格式:register 类型指示符 变量标识符;原创 2015-09-20 12:07:12 · 678 阅读 · 0 评论 -
C/C++堆栈详解
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以及在网上看帖遇到的朋友中有好多也说不清堆栈,所以我想有必要给大家分享一下我对堆栈的看法,有说的不对的地方请朋友们不吝赐教转载 2015-09-17 21:14:40 · 584 阅读 · 0 评论 -
指针函数与函数指针的区别
只怪自己当年学艺不精,对指针函数和函数指针总是傻傻分不清楚,要用到的时候总是翻书查一下,然后又忘了.......今天做了中兴的笔试题,又考到了这类问题,我当时就蒙逼了,有摄像头监控,手头又没有C语言书,只有蒙了........ 指针函数是指返回值是该类型的指针变量,本质上还是函数。比如 int * A(int num); 这就是一个 指针函数。 函数指针 是一个转载 2015-09-07 22:43:17 · 446 阅读 · 0 评论 -
Linux内核链表的一点随笔
今天在看linux的内核链表这一章时,看到了很有意思的一个东西,几下来分享下,同时写一点我的看法。谈到内核链表,在linux源码里我们会看到铺天盖地的链表,内核里有那么多的结构体,那么内核源码是怎么样将这些链表高效的操作的呢。我觉得内核源码力度额第一个亮点就是这个双向链表struct list_head的设计#define list_entry(ptr,type,member) ((t原创 2016-11-23 14:43:44 · 415 阅读 · 0 评论 -
一篇特别长的总结(C专家编程)
读一本书必输出一篇笔记或者总结!!! 《C专家编程》这本书很早看完了,但整理笔记却断断续续的花了三天时间,这从侧面更说明了这本书的经典了(尽管不到300页)! 至此C经典著作《C Traps and Pitfalls》《Expert C Programming》《POINTER ON C》已经算完整的看完了……原文地址:http://blog.csdn.net/wuzhiman转载 2017-02-20 23:54:00 · 928 阅读 · 0 评论 -
MJPG-Streamer源码分析(一)
--------------------------------------------------------------------------------------------------基础知识: 条件变量: 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作: 一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)转载 2017-02-22 18:57:22 · 615 阅读 · 0 评论 -
__attribute__()的研究
要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性,__attribute__主要用于改变所声明或定义的函数或数据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除返回值外,不会通过其它(如全局变量、指针)对函数外部产生任何影响。但这里我们比较感兴趣的是对代转载 2017-09-24 14:42:05 · 270 阅读 · 0 评论 -
a.out在运行时都干了什么
a.out是我们在linux编程环境下最常见的可执行文件了,它是Assembly output的缩写,但它却不是字面意思“汇编输出”,准确的说它是链接器最后输出的产物,延用a.out的写法只是历史原因,大家都不愿意去改了。 我们都知道程序被编辑编译链接完成后被分段组织存储,文本段+数据段+BSS段+堆栈。下面用一张图更直观的解释a.out在内存中的布局: ...原创 2018-05-01 19:54:19 · 3321 阅读 · 0 评论 -
实用的C语言工具
本文介绍程序员应该知道的C语言工具列表,有些是用作代码格式化,有些是用作程序调试,有些则是作用于目标文件的。 1、用于检查源码的工具2、用于检查可执行文件的工具3、调试工具4、性能优化工具...原创 2018-05-01 20:06:53 · 1624 阅读 · 0 评论 -
《C专家编程》之 内存泄漏
每晚一篇《Expert C Programming》,今天看到“内存泄漏”这一章,困扰了程序员多年的内存问题,作者在本章以幽默诙谐的写作风格跟小读者们做了一次不是很深的沟通,嗯,确实不是很深度的剖析,只做个介绍吧。 定义:未释放不再使用的内存,叫做内存泄露。 内存泄漏的主要特征就是罪魁进程的运行速度会减慢,因为在系统中,体积越大的进程越容易被换出(换到交换空间去),让别的进程运...原创 2018-05-06 23:59:38 · 261 阅读 · 0 评论 -
一维数组的探索
昨天面试时被考官问到指针和数组,比较刁钻的问题,没答出来,丢死人了。 按照定义,一维数组是指全部数组元素组成的一段连续的存储空间,这个空间称为数组变量。数组中的元素只能间接引用,所谓间接引用,是指通过指向该单元的地址指针来访问该单元。因此,数组名都代表数组首元素的指针常量(首元素的地址)。其实数组名首先是数组空间的标识符,代表数组变量,这就是数组名的另一个含义。 数原创 2015-09-19 17:50:05 · 379 阅读 · 0 评论 -
动态空间管理
定义数组时,占用静态分配单元,数组大小在编译阶段就确定了,而实际应用中又经常需要在程序运行期间才确定数组大小,这就需要动态分配函数malloc和calloc,从内存空间中的堆中获取动态空间,建立动态数组。(在C#中不用这么麻烦啦,一个List类就解决问题) void* malloc(unsigned size);//按字节数size分配内存空间,返回空间起始地址。 vo原创 2015-09-20 12:30:33 · 676 阅读 · 0 评论 -
指向常量的指针与常量指针的异同
当我们在模块化程序设计时,有一些数据希望共享,而又不希望其他程序修改它,也就是”只读“,我们常用const来修饰它。 指向const常量的指针:一个指针,如果通过它实施的间接引用操作只能读取不能修改,即它指向的空间是只读的,我们称这个指针为指向const常量的指针或只读指针。 const int *pc; 或 int const* pc; 表示原创 2015-09-20 16:03:49 · 512 阅读 · 0 评论 -
嵌入式C编程经典面试题
上个星期,去深圳一家搞ARM开发的公司面试,HR叫我做了一份卷子,里面都是C编程,心中暗喜,因为这些题基本上都在程序员面试宝典里见过。后来回到学校,在网上搜索,原来这些题都是嵌入式工程师的经典面试题目,很多网站上都可以找得到。现把他贴出来,附上网上的答案,跟大家分享,因为这些题实在太经典了。预处理器(Preprocessor)1 . 用预处理指令#define 声明一个常数,用以表转载 2015-11-30 11:40:10 · 964 阅读 · 0 评论 -
static函数与普通函数区别
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不转载 2015-10-20 21:07:31 · 642 阅读 · 0 评论 -
子程序调用和中断的几个概念
主程序在执行过程中执行子程序,我们称之为子程序调用。 完成子程序调用/中断需要几个概念:入口地址。程序是一组指令,第一条指令的地址称为程序的入口地址。中断和断口地址。一个程序在执行的过程中去执行另一个程序,我们称之为中断,程序中断时的下一条指令的地址称为程序的断口地址。保护现场和恢复现场。如果主程序中断时,有些寄存器还存放着中间结果,而子程序很有可能要占用这些寄存器,那么就要将原创 2015-10-10 15:54:01 · 10400 阅读 · 0 评论 -
ucGUI学习笔记之对话框
在emWin模板上学习了两个关于对话框的设计,已经接触到了对话框设计基本要用到的几种控件,现在献上我的拙见,如有误请指正!原创 2015-10-03 09:31:35 · 3111 阅读 · 0 评论 -
gcc __attribute__详解
__attribute__关键字:http://www.cnblogs.com/longdouhzt/archive/2012/11/15/2771351.html转载 2015-10-01 20:29:48 · 744 阅读 · 0 评论 -
流与文件
这两天要用到文件系统Fatfs,所以又把C语言书翻粗来看看文件相关的操作函数。(书籍真是人类的好朋友!) 数据常常需要从一个位置“流向”另一个位置,这种数据的流动称为”流“,每个具体的数据流动总是和设备和外部介质有关,这些设备和介质统称为文件。 每一个文件对应一个文件指针,如键盘对应stdin,显示器对应stdout,打印机对应sprn,数据的流动通过文件指针与一个原创 2015-09-22 11:05:09 · 531 阅读 · 1 评论 -
二维数组与指针的探索
二维数组是一种特殊的一维数组,由类型相同、长度相等的行一维数组组成,存储空间依次相邻。可有公式 loc(a[i][j]) = a +(i*列数+j)*sizeof(元素类型).计算出元素a[i][j]的地址。 二维数组名也代表指针,称为二维数组指针。这个指针与一维数组指针既有联系、又有区别。 例: int a[4][3]; a作为二维数组的原创 2015-09-21 15:17:06 · 573 阅读 · 0 评论 -
联合和枚举类型
说了结构体,就不得不说联合和枚举。 联合这个类型的设计就是为了节省内存,联合内的元素共用一段存储空间,空间大小由最大的数据元素决定。联合空间只有一个最新赋值的成员值有效。一句话总结:空间共享,后来为主。 联合的定义跟结构一样,也有3种方式“: union UNI { char ch; fl原创 2015-09-21 10:42:08 · 1407 阅读 · 0 评论 -
结构体的定义和结构变量的定义
以前写程序的时候总是要用到结构体,但是对结构体的定义老是稀里糊涂,今天梳理下,让自己长长记性! 结构体的定义有以下3种形式:‘ 1、struct Date { int year,month,da; }; 这时定义结构体变量:原创 2015-09-21 10:37:04 · 2234 阅读 · 3 评论 -
递归问题
递归的定义:把一个问题分为几个小问题,然后用同样的方法解决,这就是递归方法。 数学中很多问题是递归的,例如阶乘问题,可以用小整数的阶乘来计算大整数的阶乘;幂次值问题,可用小实数的乘幂值计算大实数的幂次值。下面以阶乘问题来介绍递归,求n!; long Fact(long n) { if(n == 0 || n == 1)原创 2015-09-20 15:05:40 · 401 阅读 · 0 评论 -
《C专家编程》之 安静的改变
先来一道题目:编写一些代码,来确定一个变量是有符号数还是无符号数。普通程序员可以很快给出一个结果:#define ISUNSIGNED(a) ( a >= 0 && -a > 0) 这个宏定义对int 和unsigned int类型的判断都是正确的,但是总是会有一些让人们觉得匪夷所思的事情发生。在K&R C标准中,这个宏对所有基本数据类型都能正确判断,但是在A...原创 2018-05-31 13:55:38 · 486 阅读 · 0 评论