C基础
文章平均质量分 72
深度Java
这个作者很懒,什么都没留下…
展开
-
C语言经典著作导读
本人不是卖书的,我也不会给出任何购书链接,只是给C语言学习者推荐一条学习的方向。如果你喜欢看电子书网上很多,如果你喜欢纸质那么就买吧,经典的书值得收藏,是对版权的尊重!基础篇1.《写给大家看的C语言书(第2版)》原书名: Absolute Beginner's Guide to C (2nd Edition) 原出版社: Sams 作者: (美)Greg Perry [作译者介绍] 译者:原创 2011-06-21 14:20:00 · 28972 阅读 · 22 评论 -
用递归法计算斐波那契数列的第n项
斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了《斐波纳契数列》季刊,专门刊载这方面的研究成果原创 2012-03-12 14:56:23 · 39817 阅读 · 2 评论 -
栈区和堆区内存分配区别
一直以来总是对这个问题的认识比较朦胧,我相信很多朋友也是这样的,总是听到内存一会在栈上分配,一会又在堆上分配,那么它们之间到底是怎么的区别呢?为了说明这个问题,我们先来看一下内存内部的组织情况.从上图可知,程序占用的内存被分了以下几部分.1、栈区(stack)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,内存的分配是连续的,类似于平时我们所说的栈,如果还不清楚,那么就把它想成数组,它的转载 2012-04-07 22:41:11 · 5449 阅读 · 2 评论 -
valgrind massif检查长期闲置堆积导致的内存泄露
memcheck内存泄露是线上很严重也是比较常见的故障,内存泄漏问题,一般可以用memcheck工具来检查。http://valgrind.org/docs/manual/mc-manual.htmlMemcheck是一个内存错误检测器。它可以检测C和C ++程序中常见的以下问题。 访问内存不应该,例如超越和不足堆积块,超出堆栈顶部,并在释放后访问内存。 使用未定义的值...原创 2019-05-02 00:29:09 · 3888 阅读 · 3 评论 -
C语言的移位操作符
C语言的移位操作符 位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。 位移位运算符的运算对象、运算规则与结果、结合性如表2-16所示。 移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移花接木有关。如果是左移,则规定补入的数全部是0原创 2004-10-30 16:36:00 · 81846 阅读 · 2 评论 -
浅析C语言的一个关键字——register
1、register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。例如下面的内存块拷贝代码,/* Procedure for the assignment of structures, */ /* if the C compiler doesnt support this feature */ #ifdef NO原创 2005-01-18 09:53:00 · 84349 阅读 · 15 评论 -
C语言的32个关键字
C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。1 数据类型关键字(12个): (1) char :声明字符型变量或函数 (2) double :声明双精度变量或函数 (3) enum :声明枚举类型 (4) float:声明浮点型变量或函数 (5) int: 声明整型变量或函数 (6) l原创 2007-03-23 22:15:00 · 38583 阅读 · 7 评论 -
C语言格式控制符和转义字符
1. 格式控制符格式输出printf 作用是向终端输出若干个类型任意的数据。格式:printf (格式控制符,输出列表)1) 格式控制符l % 格式说明引导符。l - 指定左对齐输出。l 0 指定空位填零。l m.n 指定输出域宽度及精度 m表示原创 2007-03-20 20:21:00 · 13771 阅读 · 2 评论 -
C语言scanf函数详细解释
函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。其调用格式为: scanf("",);scanf()函数返回成功赋值的数据项数原创 2004-11-09 16:42:00 · 180443 阅读 · 18 评论 -
在Linux平台上如何使用接静态库和共享库
1、Linux函数库介绍函数库可以看做是事先编写的函数集合,它可以与主函数分离,从而增加程序开发的复用性。Linux中函数库可以有3种使用的形式:静态、共享和动态。1) 静态库的代码在编译时就已连接到开发人员开发的应用程序中;2) 而共享库只是在程序开始运行时才载入;3) 动态库也是在程序运行时载入,但与共享库不同的是,动态库原创 2007-03-20 22:18:00 · 6045 阅读 · 0 评论 -
项目Makefile文件模板
整理出来的一个Makefile模板,新增了一个内容,调用gcc生成依赖文件,这样如果某个c文件包含的头文件被更新了,该c文件以及依赖于该c文件的obj文件都会被重新编译.这个模板是按照我习惯的项目文件组织形式进行定义的,我的习惯是头文件放在include文件夹,代码放在src文件原创 2010-08-02 12:22:00 · 6034 阅读 · 5 评论 -
C 语言编译器 gcc 命令详解
Linux 系统中最重要的软件开发工具是 gcc,在 Linux 系统中,c89、cc 和 gcc 这些命令基本上都指向系统的C语言编译器,通常是GNU C编译器,或都简称 gcc。在 UNIX 系统中,C 语言编译器称为 cc。实际上,gcc 能够编译三种语言:C、C++ 和 Object C(C 语言的一种面向对象扩展)。利用 gcc 命令可同时编译并连接 C 和 C++ 源程序,一般来说,原创 2007-03-19 19:29:00 · 6198 阅读 · 1 评论 -
C语言中字符数组和字符串指针分析
写下面的测试程序:#include int main(int argc, char *argv[]){ char day[15] = "abcdefghijklmn"; char* strTmp = "opqrstuvwxyz"; printf("&day is %x",&day); printf("&day[0] is %x",&day[0]); printf("day is原创 2007-03-24 16:10:00 · 8393 阅读 · 1 评论 -
C语言宏定义技巧
C语言宏定义技巧(常用宏定义)写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用得宏定义。 1、防止一个头文件被重复包含#ifndef COMDEF_H #define COMDEF_H //头文件内容#endif 2、重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节原创 2004-10-29 19:04:00 · 4273 阅读 · 0 评论 -
C语言中的CONST使用
C中的CONST使用const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。const的使用是c语言中一个比较微妙的地方,请看下面几个问题。 问题:const变量 和 常量 为什么下面的例子在使用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢? const int n =原创 2004-10-30 18:50:00 · 9072 阅读 · 3 评论 -
C语言中的字符串处理
•字符串字面量(字符串常量,在C标准中称为,字符串字面量)如何存储字符串字面量 从本质上而言,C语言把字符串字面量作为字符数组来处理。当C语言编译器在程序中遇到长度为n的字符串字面量时,它会为字符串字面量分配长度为n+1的内存空间,在末尾增加一个额外的字符——空字符( )。字符串字面量的操作 通常情况下可以在任何C语言允许使用 char * 指针的地方使用字原创 2007-03-24 16:25:00 · 6676 阅读 · 2 评论 -
PHP 调用C的代码
用php调用C函数,常通过调用系统命令函数的方式来实现,其中主要有system()和exec()两种,还有一种是passthru(),这种方法没有尝试,暂不作讨论。 system()方法输出并返回最后一行的shell结果。exec()不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。 相同点是都可以获取命令执行的状态码。 PHP调用C函原创 2005-01-05 18:08:00 · 5750 阅读 · 0 评论 -
php调用C代码的方法详解
在php程序中需要用到C代码,应该是下面两种情况: 1 已有C代码,在php程序中想直接用2 由于php的性能问题,需要用C来实现部分功能针对第一种情况,最合适的方法是用system调用,把现有C代码写成一个独立的程序。参数通过命令行或者标准输入传入,结果从标准输出读出。其次,稍麻烦一点的方法是C代码写成一个daemon,php程序用socket来和它进行通讯。原创 2009-02-01 11:14:00 · 10522 阅读 · 10 评论 -
php如何调用c接口无错版
1.首先是要安装好PHP 2.进入PHP的下载解压目录下的ext目录#cd /root/php-5.3.6/ext#./ext_skel --extname=hmc 说明:./ext_skel --extname=module_namemodule_name是你自己可以选择的扩展模块的名字,例如我选择的hmc。执行工具后会自动在ext目录下建立你选择的modul原创 2008-11-12 09:11:00 · 6307 阅读 · 2 评论 -
fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
格式化输入输出1. fprintf(格式化输出数据至文件) 相关函数 printf,fscanf,vfprintf表头文件 #include定义函数 int fprintf(FILE * stream, const char * format,.......);函数说明 fprintf()会根据参数format字符串来转换并格式化数据,然后将结原创 2007-03-20 22:10:00 · 9667 阅读 · 1 评论 -
C语言的一个关键字——static
C语言的一个关键字——staticStatic在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数。1、Static修饰变量按照作用范围的不同,变量分为局部变量和全局变量。如果用static修饰变量,不论这个变量是全局的还是局部的都是存储在静态数据区。下面分开来讲:¨ 如果用static修饰全局变量,我们称其为静态全局变量。我们用stati原创 2007-03-20 22:11:00 · 17241 阅读 · 4 评论 -
变量的属性(全局变量、局部变量、动态变量、静态变量等)
变量的属性 1、变量的分类l 根据作用域:可分为全局变量和局部变量。l 根据生存周期:可分为静态存储方式和动态存储方式,具体地又分为自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。静态存储方式是指在程序运行期间分配固定的存储空间的方式,动态存储方式是在程序运行期间根据需要进行动态的分配存原创 2008-06-18 10:00:00 · 23964 阅读 · 7 评论 -
C语言return函数
return函数说到return,有必要提及主函数的定义。很多人甚至市面上的一些书籍,都使用了void main( )这一形式 ,其实这是错误的。C/C++ 中从来没有定义过void main( ) 。C++ 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着: The definition void main( ) { /* ... */ } i原创 2007-03-24 16:52:00 · 13250 阅读 · 4 评论 -
C语言字符串处理的库函数
使用C语言字符串处理的库函数,务必包含头文件string.h,即#include 1、 比较字符串大小函数 1) 忽略大小写---strcasecmp函数原型: int strcasecmp (const char *s1, const char *s2);函数说明: 用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异2)忽略大小写—stricmp函数原型原创 2007-03-24 16:33:00 · 10748 阅读 · 1 评论 -
C语言 条件编译详解
预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。在C 语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目原创 2011-08-31 23:47:37 · 14498 阅读 · 5 评论 -
typedef struct 用法详解和用法小结
1. 基本解释typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。2. typedef & 结构的问题当用原创 2007-03-19 20:04:00 · 12105 阅读 · 2 评论 -
.c和.h文件的区别
一个简单的问题:.c和.h文件的区别学了几个月的C语言,反而觉得越来越不懂了。同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼:子程序不要定义在.h中。函数定义要放在.c中,而.h只做声明.否则多引用几次,就会发生函数重复定义的错误。3楼:.h只做声明,编译后不产生代码4楼: 这样做目的是为了实现软件的模块化使软件结构清晰,而且也便于别人原创 2004-10-24 23:20:00 · 193205 阅读 · 19 评论 -
C指针本质
C指针本质代码int a=10000;int d[]={1,2,3,4,5};int *p;int f[]={6,7,8,9,10};p=f;int i;for(i=-100;i<200;i++){printf("The string p is %d",*p);p++;printf("");}看输出很明显图已经告诉我们一切,你看出来什么了?原创 2007-03-24 12:29:00 · 4149 阅读 · 7 评论 -
c语言中int和指针和字符所占字节
Linux下sizeof(int);int 4字节sizeof(char);字符1字节char * p="12345";sizeof(p);指针占4字节原创 2007-03-19 20:00:00 · 4541 阅读 · 0 评论 -
C语言里面%2d 意思
看看下面的说明就知道啦:修饰符 格式说明 意义 int a=1;int b=1234;double c=1.2345678;printf("%2d",a);printf("%+2d",a);printf("%4d",a);printf("%2d",b);printf("%+2d",b);printf("%4d",b);printf("%原创 2004-10-30 16:10:00 · 57597 阅读 · 3 评论 -
Linux编程常见问题
错误提示:Makefile:2: *** 遗漏分隔符 。 停止。原因makefile中 gcc语句前 缺少一个 tab分割符错误提示: bash: ./makefile: 权限不够原因 makefile 是文本文件不可执行,即使是root,也会权限不够我们应该在命令行下使用make, 该指令会自动搜寻所在目录下的makefile文件,如果使用其他名称如(makefile.am)则应加参数指出,如:原创 2004-10-30 18:49:00 · 31377 阅读 · 1 评论 -
关于C语言中的malloc和free函数的用法
一、malloc()和free()的基本概念以及基本用法:1、函数原型及说明:void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。关于分配失败的原因,应该有多种,比如说空间不足就是一种。void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序原创 2007-03-24 17:10:00 · 16015 阅读 · 4 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是原创 2004-10-24 22:53:00 · 4176 阅读 · 3 评论 -
已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。
已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。 答案:int max(int a,int b){return (a+b+abs(a-b))/2;} 类似的 请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句答案:#define MAX(a,b) (a b-fabs(a-b)/2)原创 2007-03-24 16:42:00 · 6410 阅读 · 3 评论 -
二分查找法
二分查找算法的前置条件是,一个已经排序好的序列(在本篇文章中为了说明问题的方便,假设这个序列是升序排列的),这样在查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找,如果小于这个元素,就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止.int BinSearch(SeqList * R, int n , KeyType原创 2007-03-24 12:54:00 · 8204 阅读 · 1 评论 -
C语言内联函数
内联函数也称内嵌函数,它主要解决程序的运行效率。 #####################问题######################################### 函数调用需要建立栈内存环境,进行参数传递,并产生程序执行转移,这些转移都需要时间开销。 有些函数在程序中使用率较高,但代码却很短。 我们可以在程序当中用表达式替换函数调用,但是降低了函数的可读性。 ##########原创 2007-03-21 20:47:00 · 4167 阅读 · 4 评论 -
typedef的四个用途和两大陷阱
typedef的四个用途和两个陷阱---------------------------------用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, p原创 2007-03-19 19:25:00 · 3046 阅读 · 3 评论 -
快速排序
快速排序的算法思想: 选定一个枢纽元素,对待排序序列进行分割,分割之后的序列一个部分小于枢纽元素,一个部分大于枢纽元素,再对这两个分割好的子序列进行上述的过程.// 对一个给定范围的子序列选定一个枢纽元素,执行完函数之后返回分割元素所在的位置,// 在分割元素之前的元素都小于枢纽元素,在它后面的元素都大于这个元素int Partition(int array[], int low, int原创 2007-03-24 12:48:00 · 4946 阅读 · 1 评论 -
c程序性能优化
一段c程序,功能开发完成,开始性能优化。 当然是先用 -pg 编译,再gprof看“热点”在哪里,很快找到,是计算hash值的函数,于是换了个更快的hash函数——fnv (http://isthe.com /chongo/tech/comp/fnv/),速度提高了一些。接着把该hash函数内联(inline),程序又快了一些。内联函数不是解决性能问题的灵丹妙药,因为inline之后原创 2009-05-14 14:00:00 · 7437 阅读 · 3 评论 -
程序分析工具gprof介绍
程序分析是以某种语言书写的程序为对象,对其内部的运作流程进行分析。程序分析的目的主要有三点:一是通过程序内部各个模块之间的调用关系,整体上把握程序的运行流程,从而更好地理解程序,从中汲取有价值的内容。二是以系统优化为目的,通过对程序中关键函数的跟踪或者运行时信息的统计,找到系统性能的瓶颈,从而采取进一步行动对程序进行优化。最后一点,程序分析也有可能用于系统测试和程序调试中。当系统跟踪起来比较复杂原创 2007-03-19 23:18:00 · 8160 阅读 · 3 评论