C语言
文章平均质量分 64
marc07
这个作者很懒,什么都没留下…
展开
-
[转]C语言中关键字volatile的含义
原文出自http://blog.csdn.net/winson_jason/article/details/7261935volatile 的意思是“易失的,易改变的”。这个限定词的含义是向编译器指明变量的内容可能会由于其他程序的修改而变化。通常在程序中申明了一个变量时,编译器会尽量把它存放在通用寄存器中,例如ebx。当CPU把其值放到ebx中后就不会再关心对应内存中的值。若此时其他程序(例如原创 2017-03-17 12:40:49 · 455 阅读 · 0 评论 -
函数指针详解
函数指针是指向函数的指针变量。因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数原创 2017-03-17 12:42:07 · 364 阅读 · 0 评论 -
链表编程实战(二):双链表
ps:本文函数名使用中文拼音命名,仅用于方便个人学习,实际项目编程中请勿使用拼音命名方法。双链表编程#include <stdio.h>#include <stdlib.h>//双链表节点structnode {int num; //有效数据struct node *pPrev; //前向指针struct node *pNext;//后向节点};原创 2017-03-17 12:41:35 · 292 阅读 · 0 评论 -
链表编程实战(一):单链表
笔者这几天都在学习链表知识,分别进行了单链表编程和双链表编程。本文仅用于笔者个人学习,如读者想具体了解链表,请参考其他作者。本文内容为本人单链表编程代码,下一篇文章为双链表编程。ps:本文函数名使用中文拼音命名,仅用于方便个人学习,实际项目编程中请勿使用拼音命名方法。链表编程学习:单链表#include #include #include 更正说明:现在才发现博客会屏蔽一原创 2017-03-17 12:41:32 · 642 阅读 · 0 评论 -
分析全局变量、局部变量、静态全局…
(1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。 (2)静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。 (3)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而原创 2017-03-17 12:41:27 · 445 阅读 · 0 评论 -
分析Linux下静态链接库和动态链接…
注明:资料部分来源于网络 代码编译运行过程:源码.c->(预处理)->预处理过的.i源文件->(编译)->汇编文件.S->(汇编)->目标文件.o->(链接)->elf可执行程序一、静态链接库与动态链接库静态链接库通常情况下,对函数库的链接是放在编译时期(compiletime)完成的。所有相关的对象文件(objectfile)与牵涉到的函数库(library)被链接合成一个可原创 2017-03-17 12:41:24 · 894 阅读 · 0 评论 -
C语言递归方法实现斐波那契数列
本文介绍面试题经典试题之一:C语言用递归方法实现斐波那契数列(从第三个数起,后一个数等于前面两个数之和):1、1、2、3、5、8、13、21、34.........#includelong int fun(int n){if(n==1||n==2) return1;else return fun(n-1)+fun(n-2);}int main (){//1、递归方原创 2017-03-17 12:41:21 · 27431 阅读 · 1 评论 -
宏条件编译和内联函数inline
一、带参宏和带参函数的区别(宏定义的缺陷)(1)宏定义是在预处理期间处理的,而函数是在编译期间处理的。这个区别带来的实质差异是:宏定义最终是在调用宏的地方把宏体原地展开,而函数是在调用函数处跳转到函数中去执行,执行完后再跳转回来。注:宏定义和函数的最大差别就是:宏定义是原地展开,因此没有调用开销;而函数是跳转执行再返回,因此函数有比较大的调用开销。所以宏定义和函数相比,优势就是没有调用开销原创 2017-03-17 12:41:19 · 527 阅读 · 0 评论 -
C语言_枚举类型_详解
原文出处:http://www.cnblogs.com/JCSU/articles/1299051.html转载仅用于个人学习注:以下全部代码的执行环境为VC++ 6.0在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:#define MON 1#define TUE 2#define WED 3#defi原创 2017-03-17 12:41:16 · 469 阅读 · 0 评论 -
C语言测试大小端的两种正确方法
//GCC是小端模式,keil51是大端模式//注意:位运算、移位和强制类型转换都不能测试大小端//理由:经测试,以上三种方式,在gcc和keil51中编译运行下面相同代码,结果数值相同,这是错误的#include//正确方法1:共同体形式union myunion{int a;char b;};int is_little_endian1(){union myunion原创 2017-03-17 12:41:14 · 1638 阅读 · 0 评论 -
详解两个重要宏offsetof和containe…
本文解析关于结构体的两个重要宏offsetof(TYPE , MEMBER)和container_of(ptr ,type , member)实例1、#define offsetof( TYPE ,MEMBER) (int *)&((TYPE*)0)->MEMBER(备注: ->的优先级比&高)参数说明:TYPE为结构体变量类型;MEMBER为结构体中任意一个元素作原创 2017-03-17 12:41:11 · 438 阅读 · 0 评论 -
解析C语言的堆、栈和代码段、数据…
一、栈的详解运行时自动分配&自动回收:栈是自动管理的,程序员不需要手工干预。方便简单。反复使用:栈内存在程序中其实就是那一块空间,程序反复使用这一块空间。脏内存:栈内存由于反复使用,每次使用后程序不会去清理,因此分配到时保留原来的值。临时性:(函数不能返回栈变量的指针,因为这个空间是临时的)栈会溢出:因为操作系统事先给定了栈的大小,如果在函数中无穷尽的分配栈内存总能用完。二、堆内存详解原创 2017-03-17 12:41:08 · 830 阅读 · 0 评论