C编程
文章平均质量分 71
隐士桃园
有好奇心,爱接触新事物,爱看书,
展开
-
删除字符串的一部分
《C和指针》第6章编程练习:请编写一个函数,删除一个字符串的一部分,函数的原型如下:int del_substr(char *str,char const *substr )函数首先应该判断substr是否出现在str中,如果它并未出现,函数就返回0;如果出现,函数应该把str 中位于该子串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1。如果substr多次出现在str原创 2016-05-11 09:32:48 · 1556 阅读 · 0 评论 -
Linux 程序开发打印 Debug 信息的使用技巧
coding 最重要的是如何debug,debug 当然就少不了把程序信息输出,如何清晰明了地打印出程序信息,可以快速判断程序运行情况,定位程序出问题的地方。先来一段代码实战下再说: #include stdio.h>#include stdlib.h>#include errno.h>#ifndef __USE_DEBUG#define __USE_DEBUG转载 2016-06-02 00:14:16 · 1898 阅读 · 0 评论 -
C语言中 float double在内存中的存储
C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,其实不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,转载 2016-05-09 20:51:30 · 806 阅读 · 0 评论 -
栈实现的带括号的计算器
带括号的表达式计算:通过栈的应用来实现,建立操作数栈和运算符栈,运算符有优先级。规则:1.自左至右扫描表达式,凡是遇到操作数一律进操作数栈。 2.当遇到运算符时如果它的优先级比运算符栈栈顶元素的优先级高就进栈。反之,取出栈顶运算符和操作数栈栈顶 的连续两个操作数进行运算,并将结果存入操作数栈,然后继续比较该运算符与栈顶运算符的优先级。 3.遇到左括号一律进运算符栈,右括号一律不进运原创 2016-06-12 00:12:40 · 3069 阅读 · 3 评论 -
自己实现的简易版printf
我实现的这个printf主要是运用指针和可变参数来实现常用的打印功能:源码如下:#include#includevoid print_int(int argint);void print_float(double argflt);void print_small_radix(int argint,int n);void print_str(char *argstr);void原创 2016-07-06 17:49:31 · 1760 阅读 · 1 评论 -
快慢指针应用(一)
快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。应用一:判断单链表是否为循环链表让快慢指针从链表头开始遍历,快指针向前移动两个位置,慢指针向前移动一个位置;如果快指针到达NULL,说明链表以NULL为结尾,不是循环链表。如果 快指针追上慢指针,则表示出现了循环。fast=slow=head;fast=fast->next原创 2016-08-09 17:14:47 · 1364 阅读 · 0 评论 -
快慢指针应用(二)——链表排序
使用快慢指针对链表里按内容大小排序:源代码如下:#include#includetypedef struct student{ int num; struct student *next;}Node;typedef struct student *Link;Link SortedMerge(Link a, Link b);void FrontBackSplit(Link原创 2016-08-09 17:41:39 · 597 阅读 · 0 评论 -
什么是交叉编译,为什么要使用交叉编译?
一、什么是交叉编译 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(OperatingSystem)。同一个体系结构可以运行不同的操作系统;同样,同一转载 2016-09-06 11:36:31 · 1438 阅读 · 0 评论 -
幻数浅析(Magic Number)
在源代码编写中,有这么一种情况:编码者在写源代码的时候,使用了一个数字,比如0x2123,0.021f等,他当时是明白这个数字的意思的,但是别的程序员看他的代码,可能很难理解,甚至,过了一段时间,代码的作者自己再看代码的时候也忘记了这个数字代表的含义。于是感叹,虽然不知道这个数字是干什么用的,究竟代表什么,但是编译后的程序可以正常运行,真是"魔术般的数字"幻数即源于此。幻数原创 2016-04-24 13:13:36 · 7692 阅读 · 1 评论 -
C语言预定义宏(__LINE__、__DATE__等)浅析
ANSIC标准定义了以下5种可供C语言使用的预定义宏: __LINE__ 在源代码中插入当前源代码行号 __FILE__ 在源代码中插入当前源代码文件名 __DATE__ 在源代码中插入当前编译日期〔注意和当前系统日期区别开来〕 __TIME__ 在源代码中插入当前编译时间〔注意和当前系统时间区别开来〕 __STDC__ 当要求程序严格遵循ANSIC标准时该标识符被赋值为1。原创 2016-05-30 21:54:00 · 3924 阅读 · 0 评论 -
宏、函数、宏函数,内联函数的区别
http://hi.baidu.com/pobenliu/blog/item/3e458208279486a32fddd43f.html宏、函数、宏函数的区别先说宏和函数的区别:1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型.2. 宏的参数替换是不经计算而直接处理的,转载 2016-05-30 20:08:28 · 881 阅读 · 0 评论 -
int main(int argc,char* argv[])浅析
我刚接触到这两个变量时,根本不知道它们是用来做什么的,我想很多人也跟我一样,刚看到这两个变量时也是稀里糊涂的。 其实: int main(int argc,char *argv[]) 是 UNIX 和 Linux 中的标准写法,而 int main() 只是 UNIX 及 Linux 默许的用法。我们经常用的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数原创 2016-05-13 12:30:16 · 1121 阅读 · 0 评论 -
指针函数与函数指针区别
在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义:1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y);首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的转载 2016-05-13 21:43:52 · 340 阅读 · 0 评论 -
资料结束符EOF,system("stty raw")
文件结束符EOF,system(stty raw) 关于文件结束符EOFEOF 是 End Of File 的缩写。在C语言中,它是在标准文件结束符EOF,system("stty raw")>> 关于文件结束符EOFEOF 是 End Of File 的缩写。在C语言中,它是在标准库中定义的一个宏。人们经常误认为 EOF 是从文件中读取的一个字符(牢记)。转载 2016-05-14 22:43:47 · 2724 阅读 · 1 评论 -
Linux stty命令
stty时一个用来改变并打印终端行设置的常用命令。 1 ,在命令行下,禁止输出大写的方法 stty -icanon 设置一次性读完操作,如使用getchar()读操作,不需要按enter stty icanon 取消上面设置 stty -a 查看 信息 stty -echo 设置命令不被显示 stty echo 取消不显设置 stty r原创 2016-05-14 23:11:00 · 3549 阅读 · 0 评论 -
枚举类型的使用方法
1. 枚举的定义枚举类型定义的一般形式为: enum 枚举名{ 枚举值表 }; 在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。 例如: 该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。 2. 枚举变量的说明 如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,转载 2016-05-16 09:03:30 · 480 阅读 · 0 评论 -
Linux中完成输入密码显示*功能
鉴于Linux中getch函数无法使用,故LZ结合打印终端行设置命令stty命令完成此功能:源码及注释如下:#include#include#define BACKSPACE 127 //\b的阿斯科码值,/***完成的功能:输入密码显示*,能回删,未输入密码时,删除键停止工作,只能输入6位密码,按回车结束输入,输入的密*码保存在数组中**/int ma原创 2016-05-16 09:46:00 · 2601 阅读 · 0 评论 -
内联函数(内嵌函数)浅析
一、inline函数inline(小心,不是online),翻译成“内联”或“内嵌”。意指:当编译器发现某段代码在调用一个内联函数时(注意,是在编译阶段而非预处理阶段,这是和宏函数的区别之一),它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。这样做的好处是省去了调用的过程,加快程序运行速度。(函数的调用过程,参数入栈出栈、分配空间、传参、传返回值等操作,所以总要多占用一些时间)。这原创 2016-05-30 11:02:01 · 3503 阅读 · 0 评论 -
解释器与编译器的区别
编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.1、编辑:用编辑软件(EDIT.EXE或记事本)形成源程序(.ASM),如:LX.ASM;2、汇编:用汇编程序(MASM.EXE)对源程序进行汇编,转载 2017-01-13 22:07:14 · 1464 阅读 · 0 评论