C 语言
ascend__a1
早起的菜鸟有虫吃
展开
-
面向对象和面向过程的区别
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,转载 2013-10-17 09:24:46 · 630 阅读 · 0 评论 -
华为软件研发面试C语言实现1
由于本人水平有限,欢迎拍砖原创 2014-08-01 16:35:50 · 716 阅读 · 0 评论 -
内联函数inline
内联函数就是小型函数,牺牲空间来节省函数调用的开销,一般用作比较小的函数,即函数内部没有循环、开关语句等。内联函数被发明出来就是为了取代C中的宏,因为宏是单纯的替换而没有类型检查所以经常出毛病,比如:#define MAX(a, b) (a) > (b) ? (a) : (b)如果你在代码中这样写:int a = 5, b = 10;// int m转载 2014-06-19 10:14:02 · 540 阅读 · 0 评论 -
C 语言中的基本输入输出函数
1.NULL 是stdio.h文件中定义的符号常量,代表空指针。在字符串中“\0”或“\000”是代表ASCII为0的控制字符,即“空操作”字符。2.关于C语言中的“标准输入输出函数”gets(输入字符串) , puts(输出字符串 ) , scanf( 格式输入) , printf(格式输出 ).getchar( 输入字符), putchar(输出字符 )putchar函数的作用是向终端原创 2014-07-31 10:09:15 · 946 阅读 · 0 评论 -
C语言之calloc函数
【FROM MSDN && 百科】原型: void *calloc(size_t n,size_t size);#include或#include 在内存的动态内存区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。与malloc的区别是:calloc在动态分配完内存后,自动初始化该内存空间为零,而mal转载 2014-08-20 10:52:24 · 656 阅读 · 0 评论 -
用两个栈实现一个队列
两年前从网上看到一道面试题:用两个栈(Stack)实现一个队列(Queue)。觉得不错,就经常拿来面试,几年下来,做此题的应该有几十人了。通过对面试者的表现和反应,有一些统计和感受,在此做个小结。 用C++描述,题目大致是这样的: 已知下面Stack类及其3个方法Push、Pop和 Count,请用2个Stack实现Queue类的入队(Enqueue)出队(Dequeue)方法。转载 2014-09-04 20:22:14 · 475 阅读 · 0 评论 -
移位实现除法(除数不是2的幂次方)
#include #include int Division(int y,int x){ int sum=0; int i=0; while(y>x)//向左移位直到x>=y { x=x<<1; ++i;//记录左移的次数 } x=x>>1; //使x<=y --i; while(i >= 0) { if(y >= x) { sum += 1<<i原创 2014-09-06 09:08:36 · 1813 阅读 · 1 评论 -
确定一个变量是有符号数还是无符号数
读《C专家编程》,其中一段讲面试,说是微软曾经有一道面试题:写一段代码,确定一个变量是有符号数还是无符号数?书上给出了两个宏:#define ISUNSIGNED(a) (a>=0 && ~a>=0)#define ISUNSIGNED(type) ((type)0-1 > 0)第二个从类型来判断,没有问题。而第一个只能用在K&R C里,在ANSI C里就不行了转载 2014-08-28 09:14:33 · 1617 阅读 · 1 评论 -
sprintf函数详解
sprintf 将字串格式化。 头文件 #include 语法: int sprintf(string format, mixed [args]...); 返回值:字符串长度(strlen) 1. 处理字符方向。-负号时表时从后向前处理。 2. 填空字元。 0 的话表示空格填 0;空格是内定值,表示空格就放着。 3. 字符总转载 2014-08-30 09:37:15 · 4001 阅读 · 0 评论 -
互换两个变量,不使用中间变量
第一种方法:a=a+b;b=a-b;a=a-b; 代码如下: [cpp] view plaincopy#include "stdio.h" int main(void) { int a,b; printf("请输入两个变量a和b:/n"); scanf("%d %d",&a,&b); printf("a和b转载 2014-08-30 09:42:15 · 516 阅读 · 0 评论 -
可重入和不可重入
重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。一般浮点运算都是由专门的硬件来完成,举个例子假设有个硬件寄存器名字叫做FLOAT,用来计算和存放浮点数的中间运算结果假设有这么个函数void fun(){//...这个函数对FLOAT寄存器进行操作}假如第一次执行,有个对浮点数操作运算的结果临时存在FLOAT寄存转载 2014-08-30 17:27:05 · 460 阅读 · 0 评论 -
指针作为函数参数传递时需要注意的问题
#include#include#includevoid GetMemory(char *p,int num){ p=(char*)malloc(num);}int main(){ char *str=NULL; GetMemory(&str,100); strcpy(str,"hello"); printf(str); return 0;}原创 2014-09-02 09:45:25 · 2816 阅读 · 1 评论 -
顺时针打印矩阵与二维数组作为函数参数
1.顺时针#includevoid PrintMatrixInCircle(int (*data)[3],int rows,int columns,int start){ int endx=columns-start-1; int endy=rows-start-1; //从左到右打印一行 for(int i=start;i<=endx;++i) { int number=dat原创 2014-09-02 20:00:33 · 778 阅读 · 1 评论 -
C语言scanf函数与空格
| 问题描述一:(scanf()读入字符串中的空格) |----------------------------------------------------#includeint main(){ char a[777]; scanf("%[^/n]",&a); printf("%s",a); return 0;}说明:在sca转载 2014-06-16 14:46:31 · 699 阅读 · 0 评论 -
static和extern
一些基本概念:1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌 入式下做开发工作的话,那么你可能非常的理解编译与连接的区别!当在转载 2014-07-03 09:00:54 · 449 阅读 · 0 评论 -
C语言中返回指针的函数和指向函数的指针
两个函数 int *p( int a,int b) 和int(*p)( int a,int b )中的p有何区别?正如文章题目所言,一个是函数的指针返回值,一个是指向函数的指针,在这里 int *p( int a,int b)函数的返回值指向一个整型变量。 要弄明白两者的区别,首先得知道运算符()和*的优先级,由于运算符()的优先级要高于*,p先与后面的()结合,所以int原创 2013-11-08 10:30:14 · 866 阅读 · 0 评论 -
几款代码比较工具
优秀的代码比较工具BeyondCompare软件功能:用于比较和合并源代码Beyond Compare 是一款不可多得的专业级的文件夹和文件对比工具。使用他可以很方便的对比出两个文件夹或者文件的不同之处。并把相差的每一个字节用颜色加以表示,查看方便。并且支持多种规则对比。对软件汉化者来说,这绝对是一款不可多得的工具。该工具有Windows和Linux下两个版本T转载 2013-11-23 10:06:14 · 782 阅读 · 0 评论 -
Linux C中结构体初始化(C99标准)
在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&R二版)中没有介绍过的。这种方式称为指定初始化(designated initializer)。下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb_stora转载 2013-11-10 22:59:43 · 1377 阅读 · 0 评论 -
关于inline函数
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****/}; inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,转载 2014-02-16 19:31:53 · 551 阅读 · 0 评论 -
C语言中的EOF是什么?
作者: 阮一峰日期: 2011年11月12日我学习C语言的时候,遇到的一个问题就是EOF。它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。 int c; wh转载 2014-05-07 15:19:14 · 1851 阅读 · 0 评论 -
深入理解typedef
转自http://blog.sina.com.cn/s/blog_5e8facd20100qfpn.htmltypedef作为类型定义关键字,用于在原有数据类型(包括基本类型、构造类型和指针等)的基础上,由用户自定义新的类型名称。 在编程中使用typedef的好处,除了为变量取一个简单易记且意义明确的新名称之外,还可以简化一些比较复杂的类型声明。比如: typed转载 2013-11-02 17:10:30 · 494 阅读 · 0 评论 -
void及void指针含义的深刻解析
编译器语言parametersp2pfunction目录(?)[+]void的含义void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。void指针使用规范①void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值。例如:int * pint;void *pvoid;pvoid =转载 2014-04-27 11:16:05 · 491 阅读 · 0 评论 -
ACM基本输入输出
在开始做ACM时,会面临一个输入输出数据的问题,ACM里的输入输出数据和平时的写程序不大一样。为什么会不一样呢,这就牵涉到评测系统怎么判断你提交的程序是正确的。实际上评测系统是把程序的标准输入输出数据都是放在文本文件里,你提交的程序会先经过编译,然后运行,从输入文件中读取数据,然后把结果输出到一个文本文件中,评测系统再把标准的输出文件和你提交的程序运行的结果的输出文件进行对比,从而判断你提交的程序转载 2014-04-27 15:10:30 · 585 阅读 · 0 评论 -
用Visual Studio 2010 编写C程序(详细步骤)
1.原创 2014-04-29 00:16:57 · 6244 阅读 · 1 评论 -
C语言中 NULL和NUL的区别
NULL is a macro defined in several standard headers, 0 is an integer constant, '\0' is a character constant, and nul is the name of the character constant. All of these are not interchangeable:NUL转载 2014-06-23 16:52:21 · 592 阅读 · 0 评论 -
C语言中void和NULL
1 void 和void*(1) 介绍 《The C Programming Language》[1] void附录A6.7:The(nonexistent) value of a void object may not be used in any way, and neither explicit nor implicit conversion to any non-转载 2014-06-12 00:35:11 · 911 阅读 · 0 评论 -
STM32中assert_param的使用
在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用。如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义;在固件库中,它的作用就是检测传递给函数的参数是否是有效的参数。所谓有效的参数是指满足规定范围的参数,比如某个参数的取值范围只能是小于3的正整数,如果给出的参数大于3,则这个assert_转载 2014-06-12 00:35:59 · 483 阅读 · 0 评论 -
各种排序方法对比(补充中)
重点从时间复杂度、空间复杂度、适用情况等多个方面进行综合比较。1.简单选择排序(1)基本原理:对于给定的一组记录,经过第一轮比较后得到最小的值,然后将该记录与第一个记录的位置进行交换;接着对不包括第一个记录以外的其他记录进行第二轮比较,得到最小记录并与第二个记录进行位置交换;重复该过程,直到进行比较的记录只有一个为止。(2)特点:交换移动的数据次数比较少。(3)算法时间复杂原创 2014-09-30 16:38:21 · 595 阅读 · 0 评论