
编程语言
文章平均质量分 53
懒人李冰
音视频编解码
展开
-
【C语言天天练(十八)】字符/字符串输入函数fgetc、fgets、getc、getchar和gets
#include int fgetc(FILE *stream);char *fgets(char *s, int size, FILE *stream);int getc(FILE *stream);int getchar(void);char *gets(char *s);fgetc()读取文件指针stream所指向文件的下一个字符,返回值是所读取字符强制类型转原创 2014-06-27 17:35:06 · 3778 阅读 · 0 评论 -
【C语言天天练(十二)】命令行参数
C程序的main函数具有两个形参。第1个通常称为argc,它表示命令行参数的数目。第2个通常称为argv,它指向一组参数值。指针数组:这个数组的每个元素都是一个字符指针,数组的末尾是一个NULL指针。argc的值和这个NULL值都用于确定实际传递了多少个参数。argv指向数组的第1个元素,这就是它为什么被声明为一个指向字符的指针的指针的原因。注意:通常第1个参数就是程序的名称。示例:#原创 2014-06-17 21:03:53 · 1259 阅读 · 0 评论 -
【C语言天天练(二四)】内存分配
引言: 对于C语言程序,了解它运行时在内存中是如何分配的对于我们理解它的运行机制是非常有用的。下面就总结一下C语言程序的一些内存分配知识。一 一段C程序,编译连接后形成的可执行文件一般有代码段、数据段、堆和栈等几部分组成。其中数据段又包括只读数据段、已初始化的读写数据段和未初始化的BSS段。如下图所示:文本段:存放程序执行原创 2014-07-10 16:08:37 · 1527 阅读 · 1 评论 -
C进阶指南(1):整型溢出和类型提升、内存申请和管理
原文地址:http://pfacka.binaryparadise.com/articles/guide-to-advanced-programming-in-C.html翻译地址:http://blog.jobbole.com/72830/C语言可用于系统编程、嵌入式系统中,同时也是其他应用程序可能的实现工具之一。 当你对计算机编程怀有强烈兴趣的时候,却对C语言不感冒,这种可能性翻译 2014-07-10 11:11:38 · 1221 阅读 · 0 评论 -
C进阶指南(2):数组和指针、打桩
原文地址:http://pfacka.binaryparadise.com/articles/guide-to-advanced-programming-in-C.html翻译地址:http://blog.jobbole.com/72830/三、指针和数组尽管在某些上下文中数组和指针可相互替换,但在编译器看来二者完全不同,并且在运行时所表达的含义也不同。翻译 2014-07-10 11:20:41 · 1390 阅读 · 0 评论 -
C进阶指南(3):显式内联、矢量扩展、C的逸闻轶事
五、显式内联函数代码可被直接集成到调用函数中,而非产生独立的函数目标和单个调用。可显式地使用 inline 限定符来指示编译器这么做。根据 section 6.7.4 of C standard inline 限定符仅建议编译器使得”调用要尽可能快”,并且“此建议是否有效由具体实现定义”要用内联函数优点,最简单的方法是把函数定义为 static ,然后将定义放入头文件。翻译 2014-07-10 11:24:30 · 1443 阅读 · 0 评论 -
【C语言天天练(十三)】printf、fprintf、sprintf和snprintf函数
#include int printf(const char *format, ...);int fprintf(FILE *stream, const char *format, ...);int sprintf(char *str, const char *format, ...);int snprintf(char *str, size_t size, const cha原创 2014-06-18 22:34:50 · 3682 阅读 · 1 评论 -
【C语言天天练(十四)】const关键字详解
const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,了解const的作用,在看别人的代码时,对理解对方的程序有一定帮助。1、const可以理解成是”只读变量“的限定词,从这里可以看出,const修饰的是变量,跟常量是不同的,常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。而”只读变量“则是在内存中开辟一个原创 2014-06-19 15:13:57 · 1260 阅读 · 0 评论 -
【C语言天天练(十五)】字符串输入函数fgets、gets和scanf
引言:如果想把一个字符串读到程序中,必须首先预留存储字符串的空间,然后使用输入函数来获取这个字符串。读取字符串输入的第一件事是建立一个空间以存放读入的字符串。char *name;scanf("%s", name);这段代码虽然可能通过编译,但因为name可以指向任何地方,所以它的输入值可能覆盖以前name所指位置的值。解决办法是声明一个固定大小的字符数组,或者使用C库原创 2014-06-23 09:41:11 · 2637 阅读 · 0 评论 -
【C语言天天练(十六)】字符串输出函数puts、fputs和printf
C有三个用于输出字符串的标准库函数puts()、fputs()和printf()。1、puts()函数只需要给出字符串参数的地址。#include int puts(const char *s);示例:#include #define DEF "I am libing"intmain(int argc, char **argv){ char str1[30] =原创 2014-06-23 11:06:39 · 4572 阅读 · 0 评论 -
【C语言天天练(二)】预处理
C语言的预处理原创 2014-04-26 08:52:28 · 1388 阅读 · 0 评论 -
【C语言天天练(三)】typedef详解
typedef详解原创 2014-04-28 19:42:14 · 1783 阅读 · 0 评论 -
【C语言天天练(零)】变量的存储类型
C语言中,各种变量的存储类型介绍原创 2014-04-25 09:44:32 · 1754 阅读 · 0 评论 -
【C语言天天练(一)】变量的类型限定词
C语言中变量类型的限定词原创 2014-04-25 14:33:24 · 1936 阅读 · 1 评论 -
【C语言天天练(五)】strlen和sizeof
sizeof与strlen的区别原创 2014-05-06 17:20:40 · 1417 阅读 · 0 评论 -
【C语言天天练(四)】回调函数
回调函数说明及使用示例原创 2014-05-06 15:28:39 · 1694 阅读 · 2 评论 -
【C语言天天练(十一)】深入理解指针
引言:在C语言中,指针的地位是不言而喻的,要想很好的掌握C语言,掌握指针是必须的,这也是C语言不同于其他语言的地方。(一)指针的指针例子:int i; int *pi;/*把pi初始化为指向变量i,pi = &i*/ int **ppi;/*把ppi初始化为指向变量pi,ppi = &pi*/初始化指针后,就可以使用它们了。例如i = 'a'; *pi = 'a原创 2014-06-17 20:24:50 · 1266 阅读 · 0 评论 -
【C语言天天练(八)】字符串
字符串是一种重要的数据类型,但C语言中没有显式的字符串数据类型。头文件string.h中包含了大多数对字符串的操作函数。因此,有字符串的操作时,一般会包含string.h头文件。1、字符串的长度:对字符串进行的操作中,经常要对它进行求长度的操作。字符串的长度就是它所包含的字符个数。size_t strlen(char const *string);注意:strlen返回一个类型为siz原创 2014-06-16 17:12:05 · 1276 阅读 · 0 评论 -
【C语言天天练(六)】指针
指针变量一定要先进行初始化,然后才能使用。初始化指要对指针变量进行赋值,将一个地址值赋值给指针变量。极为常犯的错误是:int *a;*a = 12; /*未对它进行初始化,没有办法预测12这个值将存储于什么地方*/分析几个指针的例子;1、*d = 10 - *d; 两个间接访问操作。右边的间接访问作为右值使用,所以它的值是d所指向的位置所存储的值(a的值)。左边的简介访原创 2014-06-16 15:08:59 · 1198 阅读 · 1 评论 -
【C语言天天练(十七)】字符/字符串输出函数fputc、fputs、putc、putchar和puts
#include int fputc(int c, FILE *stream);int fputs(const char *s, FILE *stream);int putc(int c, FILE *stream);int putchar(int c);int puts(const char *s);fputc()写一个字符c,强制转换成一个unsigned ch原创 2014-06-27 16:31:06 · 3633 阅读 · 0 评论 -
【C语言天天练(十九)】restrict关键词
引言:在内核的系统调用函数里,经常遇到函数的参数使用restrict限定词限定的情况,下面就对该关键词做个总结。1、restrict关键词是C99特性才添加的,因此在编译使用含有该限定词的程序时,一定要在后边添加-std=c99的标志,使得gcc能够支持c99标准。2、restrict既然是个限定词,那么它限定什么变量呢?它只能限定指针变量!经过它限定的数据对象,表明指针时访问该数据对象的原创 2014-06-30 07:01:03 · 1686 阅读 · 1 评论 -
【C语言天天练(二十)】scanf函数详解
引言:scanf函数虽然是学习C语言时比较早就接触的一个函数,但在使用过程中,发现真正掌握它却并不容易。本文就通过各种例子来详细的总结一下该函数的各种用法,假设它的调用格式为 scanf("",)。1、一般使用scanf函数时都是为某个变量赋值,不考虑它的返回值。但是任何函数都是需要返回的(即使返回类型用void,也可以认为只是调用了return语句,只是并没有返回什么东西而已),同样原创 2014-07-01 22:14:31 · 2425 阅读 · 1 评论 -
【C语言天天练(二一)】内联函数
引言:调用函数时,通常会因为建立调用、传递参数、跳转到函数代码并返回等花费掉一些时间,C语言的解决办法是使用类函数宏。在C99中,还提出了另外一种方法:内联函数。 内联函数:把函数变为内联函数将建议编译器尽可能快速地调用该函数,至于建议的效果则由实现来定义。因此,使函数变为内联函数可能会简化函数的调用机制,但也可能不起作用。内联函数是通过编译器来实现的,而宏则是在预编译的时候替换原创 2014-07-02 19:30:05 · 1695 阅读 · 0 评论 -
【C语言天天练(二二)】位操作
一、C的位运算符原创 2014-07-04 06:31:45 · 1479 阅读 · 0 评论 -
【C语言天天练(二三)】errno变量
引言: 在C编程中,errno是个不可缺少的变量,特别是在网络编程中。如果你没有用过errno,那只能说明你的程序不够健壮。 为什么会使用errno呢?这是系统库设计中的一个无奈之举,他更多的是个技巧,而不是架构上的需要。我们观察下函数结构,可以发现,函数的参数返回值只有一个,这个返回值一般可以携带错误信息,比如负数表示错误,而正数表述正确的返回值,比如recv函数。但是对于一些返原创 2014-07-04 09:02:08 · 1858 阅读 · 0 评论 -
【C语言天天练(三)】函数
对于程序来讲,函数的地位是不言而喻的。下面先给出函数的定义,然后根据定义分析C语言中的函数。函数定义:类型函数名(形式参数)代码块由定义可以看出函数主要包括四部分:函数类型、函数名、函数形参、函数代码块。函数类型:指明了函数返回值的类型,是整数、浮点数、指针甚至是结构体等等。需要注意的两点:1、如果类型是void,则没有返回值。如果是void *型的返回值,原创 2014-06-13 09:45:39 · 1348 阅读 · 0 评论 -
【C语言天天练(五)】setjmp和longjmp
setjmp和longjmp组合可以原创 2014-06-13 17:25:36 · 1150 阅读 · 0 评论 -
【C语言天天练(零)】a.out简介
在Linux下编译链接程序时,如果不用‘-o’选项来指定输出文件名称,默认情况下就会输出名为‘a.out’的文件。为什么默认是‘a.out’而不是别的名称呢?这是一个历史遗留问题。在早期的BSD文档里有下面的提示:a.out —— 汇编程序和链接编辑输出格式。可以看出它是一种输出格式,与EFL格式、二进制格式等是并列的。a.out是‘assembler output(汇编程原创 2014-06-12 09:50:12 · 6155 阅读 · 0 评论 -
【C语言天天练(二)】static关键字
static关键字用于不同上下文环境时,具有不同的意义。(一)当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标示符的链接属性,从externl改为internal。但标示符的存储类型和作用域不受影响。这种方式声明的函数或变量只能用于声明它们的源文件中。(二)当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变原创 2014-06-13 07:09:03 · 1689 阅读 · 0 评论 -
【C语言天天练(一)】while(1)死循环与for(;;)死循环的区别
单片机的编程中经常用到while(1)死循环来进行轮寻操作,但分析Linux内核源代码时却经常见到for(;;)作为死循环的条件。两者区别:区别一for(;;)死循环里的两个;;代表两个空语句,编译器一般会优化掉它们,直接进入循环体。while(1)死循环里的1被看成表达式,每循环一次都要判断常量1是不是等于零。区别二for.c源码:#include int mai原创 2014-06-12 22:37:27 · 8233 阅读 · 0 评论 -
【C语言天天练(七)】回调函数
想要全面的了解一个概念,必须至少了解它的三点:它是什么、它有什么用、它在什么时候用。对于回调函数,同样从三个方面了解它。1、什么是回调函数?2、回调函数该如何使用? 3、回调函数在什么情况下使用?答案一:回调函数:见名知意,首先肯定的一点是它是一个函数,修饰词回调指的是程序员自己定义一个函数并实现它的程序内容,然后把这个函数的指针作为参数传递给其他函数(如系统函数)中,原创 2014-06-16 15:16:02 · 1172 阅读 · 0 评论 -
【C语言天天练(九)】动态内存分配
引言:数组的元素存储于内存中连续的位置上。当一个数组被声明时,它所需要的内存在编译时就被分配。但是,我们可以使用动态内存分配在运行时为它分配内存。一块内存的生命周期可以分为四个阶段:分配、初始化、使用、释放。内存的分配一般使用C函数库里的malloc函数(原型:void *malloc(size_t size))。关于malloc函数应该注意一下几点:1、malloc的参数就是原创 2014-06-16 20:13:45 · 1604 阅读 · 0 评论 -
【C语言天天练(十)】结构体
引言:数据经常以成组的形式存在。在C中,使用结构可以把不同类型的值存放在一起。结构的声明有两种1、struct SIMPLE{int a;char b;float c;};然后用标签SIMPLE去声明结构体变量。2、typedef struct{int a;char b;float c;}Simple;然后用Simple去声明结构体变量。此时Simple原创 2014-06-16 21:34:12 · 1268 阅读 · 0 评论 -
【C语言天天练(四)】可变参数函数
可变参数函数指可以接受可变数量原创 2014-06-13 14:16:09 · 1232 阅读 · 0 评论 -
C++学习之Numeric overflow due to incorrect type casting
由于不正确的类型转换导致的数字溢出,可能会导致错误的结果。这种错误通过debug并不好追踪。示例1:typedef unsigned long long uint64_t;typedef unsigned int uint32_t;uint64_t foo(uint32_t x, uint32_t y){ uint64_t z; z = (uint64_t)( x * y );原创 2016-03-06 10:27:08 · 978 阅读 · 0 评论