
c语言
文章平均质量分 67
o倚楼听风雨o
人生如逆旅,我亦是行人。
展开
-
内核双向循环链表介绍
前言 linux内核通常使用一个名字为(struct list_head)的结构体来实现双向循环链表。struct list_head数据结构如下:struct list_head { struct list_head *next, *prev;}; 在需要构造双向循环链表的数据结构中加入(struct list_head)成员,然后通过该成员将数据结构连接成双向循环链表原创 2016-11-04 16:26:36 · 421 阅读 · 0 评论 -
单向链表的简单使用
一、单向链表的概念 单向链表是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。链表是使用指针进行构造的列表,并且是由一个个结点组装起来的,因此又称为结点列表。其中每个结点都有指针成员变量指向列表中的下一个结点,head指针指向第一个结点称为表头,而终止于最后一个指向nuLL的指针。 结点的数据结构typedef struct _LINK_N原创 2016-09-28 20:52:25 · 15306 阅读 · 2 评论 -
函数指针简介
一、什么是函数指针 我们都知道,数组名就是指向数组第一个元素的常量指针。同理,对于一个函数而言,函数名也是指向函数第一条指令的常量指针。而编译器要做的就是在程序编译之后,为每个函数分配一个首地址,即该函数第一条指令的地址。一般情况下,我们可以用一个指针来保存这个地址,而这个指针就是函数指针,该指针可以看作是它指向的函数的别名,所以我们可以用该指针来调用这个函数。 二、如原创 2016-09-26 21:52:04 · 403 阅读 · 0 评论 -
循环队列的c语言实现
一、什么是循环队列 1、基本概念 队列就是一个能够实现“先进先出”的存储结构,队列分为链式队列和静态队列。静态队列一般用数组来实现,但此时的队列必须是循环队列,否则会造成巨大的内存浪费;链式队列是用链表来实现队列的。说白了循环队列就是一个数组,我们把这个数组当成首尾相连来使用(写到数组的末尾后从头开始写)。 2、结构体typedef char Item;原创 2016-09-23 21:04:46 · 6976 阅读 · 1 评论 -
va_start和va_end使用详解
转载地址:http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html C函数传递参数的用法和原理1.1 用法 在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表,例如void foo(...);void foo(parm_list,...);这种方式和我们以前认识的不大一样,但我们要记住这是C中一种转载 2016-11-25 09:39:17 · 642 阅读 · 0 评论 -
运算符优先级
假设high和low是两个整数,他们的值介于0-15之间,如果r是一个八位整数,且r的低四位与low的各位上一致,而r的高四位与high的各位上一致,很自然会想到要这样写: r = high << 4 + low 但是很不幸,这样写是错误的,加法运算的优先级要比移位运算的优先级要高,因此本例实际上相当于: r = high << (4 + low) 对于这种情况,有两种更正方原创 2016-12-27 14:27:59 · 1385 阅读 · 0 评论 -
结构体对齐详解
原文地址: http://www.cnblogs.com/motadou/archive/2009/01/17/1558438.html1、结构体数据成员对齐的意义 许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的起始地址的值是某个数k的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。这种强制的要求一来简化了处转载 2017-02-21 21:28:46 · 1519 阅读 · 1 评论 -
应用程序段错误调试
1、段错误(SIGSEGV)的产生 从用户态程序开发的角度,我们并不需要理解操作系统复杂的内存管理机制,这是和硬件平台相关的。但是了解内核发送SIGSEGV信号的流程,对我们理解SIGSEGV是很有帮助的。 红色部分展示了内核发送SIGSEGV 信号给用户态程序的总体流程。当用户态 程序访问一个会引发SIGSEGV 的地址时,硬件首先产生一个page fault,即“缺页异常”。 在原创 2017-02-20 20:21:28 · 948 阅读 · 0 评论