
C语言积累
lbsljn
这个作者很懒,什么都没留下…
展开
-
编写适合自己的printf()函数(转)
对于嵌入式软件的开发人员而言,“printf调试(printf-debugging)”这个术语描述了将调试字符串从嵌入式目标空闲的串口压出,并在运行于宿主工作站的终端模拟器上显示结果的常见方法。 出于这个目的,许多程序员更喜欢使用有名的printf() C语言库函数,因为它在将文本输出和数据组合成单个函数调用上具有灵活性。但是,不在嵌入式系统中使用printf()无外乎两个常见的原因:不是因为转载 2008-12-12 17:37:00 · 807 阅读 · 0 评论 -
堆和栈的区别和联系
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(sta转载 2009-06-17 23:02:00 · 890 阅读 · 0 评论 -
编程修养(二)
编程修养(二) 11、出错信息的处理---------你会处理出错信息吗?哦,它并不是简单的输出。看下面的示例: if ( p == NULL ){ printf ( "ERR: The pointer is NULL/n" ); } 告别学生时代的编程吧。这种编程很不利于维护和管理,出错信息或是提示信息,应该统一处理,而不是像上面这样,写成一个"硬编码"。第10条对这方面的处理做了一转载 2009-06-17 23:00:00 · 513 阅读 · 0 评论 -
编程修养(一)
编程修养(一) 什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。我认为好的程序员应该有以下几方面的素质: 1、有专研精神,勤学善问、举一反三。 2、积极向上的态度,有创造性思维。 3、与人积极交流沟通的能力,有团队精神。 4、谦虚谨慎,戒骄戒燥。 5、写出转载 2009-06-17 22:59:00 · 544 阅读 · 0 评论 -
指针、结构体、联合体的安全规范
指针赋予了C编程最大的灵活性;结构体使得C程序整齐而紧凑;联合体在某些要求注重效率的场合有精彩的表现,这三个要素是C语言的精华。 然而,精华并不意味着完美,C语言在赋予程序员足够灵活性的同时,也给了程序员很多犯错误的机会。所以有必要关注指针、结构体和联合体的实现细节,从而保障程序的安全性。 在此.第一部分介绍《MISRA—C:2004》中与指针相关的部分规则,第二部分转载 2009-06-17 22:58:00 · 814 阅读 · 0 评论 -
学习C语言指针
先看个程序,是华为2005年招聘笔试题之一#include main(){int a[3]={1,2,3};int *p,*q;p=a;q=&a[2];printf(" a[p-q]=%d/n q=%d/n p=%d/n q-p=%d/n",a[q-p],q,p,q-p);getch();}运行结果:a[q-p] = 3q = -42p = -46q-p = 2 6.3转载 2009-06-17 22:57:00 · 753 阅读 · 0 评论 -
Sizeof与Strlen的区别与联系
Sizeof与Strlen的区别与联系1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。2.sizeof是算符,strlen是函数。3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”’结尾的。sizeof还可以用函数做参数,比如:short f();转载 2009-06-17 22:56:00 · 411 阅读 · 0 评论 -
C语言宏定义使用技巧
写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性 等等。下面列举一些成熟软件中常用得宏定义。。。。。。1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H//头文件内容#endif2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedef unsign转载 2009-06-17 22:55:00 · 451 阅读 · 0 评论 -
typedef用法
一.基本概念剖析int* (*a[5])(int, char*); //#1void (*b[10]) (void (*)()); //#2double(*)() (*pa)[9]; //#31.C语言中函数声明和数组声明。函数声明一般是这样:int fun(int, double);对应函数指针(pointer to function)的声明是这样:int (*转载 2009-06-17 22:54:00 · 444 阅读 · 0 评论 -
C语言-预处理
在源程序中经常会使用以“#”号开头的预处理命令。如包含命令# include,宏定义命令# define等。在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们称为预处理部分。 所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作转载 2009-06-17 23:03:00 · 1376 阅读 · 0 评论 -
位运算
缘起:C语言区别于其它语言的重要特点是支持位运算,使其能够完成汇编语言所能完成的大部分功能。但是学校开设的C语言课程中老师往往将位运算这一章一代而过,好像这一张根本不重要。但是在实际的编程中借助于位运算往往可以设计出简洁的算法,使程序简化,并且获得较高的效率。而且在某些对硬件进行控制的编程中,位运算是必不可少的。因此笔者参考了相关书籍,总结了一些规律和助记口诀,希望对读者有所帮助。 一 优先级转载 2009-06-17 23:03:00 · 701 阅读 · 0 评论 -
C UDR 的内存分配
说明如何使用 Informix C DataBlade API 内存管理函数。简介UDR 不能调用标准操作系统内存分配函数,如 malloc() 、 calloc() 、 realloc() 和 free() 。关于体系结构问题的详细说明,请参阅转载 2009-09-03 21:40:00 · 1266 阅读 · 0 评论 -
用C语言扩展Python的功能
当今有许多免费的 RDBMS(Relational Database ManagementSystem,关系数据库管理系统),其中一些是开放源码软件,另一些是商业厂商提供的免费产品。如果您正在使用 C/C++、Java™、.NET或 PHP开发应用程序,想寻找一种可靠的数据服务器,希望它支持先进的技术、具有不断扩大的开发人员社区并已经部署在许多关键的业务解决方案中,那么可以考虑采用转载 2009-09-03 21:39:00 · 1172 阅读 · 0 评论 -
memcpy, strncpy, strcpy
/*** memcpy - Copy one area of memory to another* @dest: Where to copy to* @src: Where to copy from* @count: The size of the area.** You should not use this function to access IO space, us转载 2009-06-17 22:32:00 · 644 阅读 · 0 评论 -
浅谈C中的malloc和free[转载bc-cn C语言论坛]
一、malloc()和free()的基本概念以及基本用法: 1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。 关于分配失败的原因,应该有多种,比如说空间不足就是一种。 void free(void *FirstByte): 该函数是将之前用malloc分配的空间转载 2009-06-17 23:08:00 · 963 阅读 · 1 评论 -
C/C++语言void及void指针深层探索
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一转载 2009-06-17 23:07:00 · 748 阅读 · 0 评论 -
C/C+语言struct深层探索
1. struct的巨大作用 面对一个人的大型C/C++程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C++程序,势必要涉及一些(甚至大量)进行数据组合的结构体,这些结构体可以将原本意义属于一个整体的数据组合在一起。从某种程度上来说,会不会用struct,怎样用struct是区别一个开发人员是否具备丰富开发经历的标志。 在网络协议、通信控制转载 2009-06-17 23:06:00 · 638 阅读 · 0 评论 -
嵌入式C语言面试题
预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计转载 2009-06-17 23:05:00 · 1067 阅读 · 0 评论 -
优化C代码常用的几招
在性能优化方面永远注意80-20原则,即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码。不要优化程序中开销不大的那80%,这是劳而无功的。第一招:以空间换时间计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值:方法A:通常的办法#define LEN 32转载 2009-06-17 23:04:00 · 795 阅读 · 0 评论 -
结构体零长度数组的作用
在一些 C 语言编写的代码中,有时可以看到如下定义的结构:typedef struct user_def{ char * name; int length; char bytes[0];} user_def_t; 这个 bytes 是什么意思?我们知道 0 == sizeof(bytes),那么 bytes 仅仅是为了定义结构的尾地址吗?不是转载 2009-06-17 22:47:00 · 607 阅读 · 0 评论 -
C语言宏定义技巧(常用宏定义)
1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 typedef unsigned char boolean; /* Boolean value typ转载 2009-06-17 22:42:00 · 2693 阅读 · 0 评论 -
c 单链表操作
#include "stdio.h"typedef struct lnode /*定义节点类型*/{ char data; /*数据域*/ struct lnode *next; /*指针域*/ }lnode;/*函数名称:creat*//*功能描述:生成单链表*//*返回类型:无返回值*//*函数转载 2009-04-21 23:03:00 · 1647 阅读 · 1 评论 -
linux c常用字符串处理函数( 2 )
一、sprintf名称:sprintf功能: 格式化字符串复制函数头文件:#include .h>函数原形:int sprintf(char *s,const char *format,.....);参数: s 目转载 2009-04-21 23:11:00 · 1800 阅读 · 0 评论 -
C语言的几个修饰符
一、const修饰符Const修饰符在C语言中是一个比较新的描述符,意即其所修饰的对象为常量。说明:1、必须初始化const int i=5; //合法const int j; //非法,导致编译错误{const int j;j=5;} //非法2、可以通过函数进行初始化int value();const int i=value();3、限定符声明变量只转载 2009-04-21 23:09:00 · 2084 阅读 · 0 评论 -
c 环状队列
#include #define maxsize 10typedef struct{ int elem[maxsize]; int front,rear;}queue;void init_queue(queue *cp){ cp->front=0; cp->rear=0;}void en_queue(queue *cp,int转载 2009-04-21 23:07:00 · 681 阅读 · 0 评论 -
指针(详解)本人觉得写的很不错
[转]这篇文章摘自网易广州社区的C语言版精华区。文章不错,不敢独享!作者girlrong是以前C语言版版主,她乐于助人,虚心诚恳,颇受网友欢迎。只可惜现在已退隐江湖了。 第一章。指针的概念指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们转载 2008-12-18 12:27:00 · 542 阅读 · 0 评论 -
顺序表示的线性表的基本操作
/* ******************************************************** * 科目; 顺序表示的线性表的基本操作 * 描述;用C实现线性表; *作者;刘柏燊 *2008年12月14日***********************************************************/ void InitList(SqList *L)原创 2008-12-14 23:02:00 · 887 阅读 · 0 评论 -
用C实现单链表
/* ******************************************************** * 科目; 带有头结点的单链表的基本操作 * 描述;用C实现单链表; *作者;刘柏燊 *2008年12月14日***********************************************************/ /*带有头结点的单链表的基本操作 */ voi原创 2008-12-14 23:09:00 · 933 阅读 · 0 评论 -
C语言之typedef的问题
1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。 至于typedef有什么微妙之处,请你接着看下面对几个问题的具体阐述。 2转载 2008-12-14 22:46:00 · 589 阅读 · 0 评论 -
c 二叉树基本操作
/*二叉数的基本操作*/#include struct tree{ int data; struct tree *left; struct tree *right;};typedef struct tree treenode;typedef treenode *b_tree;b_tree creat(){ char ch;转载 2009-04-21 23:08:00 · 954 阅读 · 0 评论 -
linux c常用字符串处理函数( 1 )
一、puts名称:puts功能: 向显示器输出字符串。头文件:#include .h>函数原形:int puts(const char *s);参数: s 字符串 返回值: 成功返回输转载 2009-04-21 23:10:00 · 3574 阅读 · 0 评论 -
C99新特性
在ANSI标准化后,C语言的标准在一段相当的时间内都保持不变,尽管C++继续在改进。(实际上,Normative Amendment1在1995年已经开发了一个新的C语言版本。但是这个版本很少为人所知。)标准在90年代才经历了改进,这就是ISO9899:1999(1999年出版)。这个版本就是通常提及的C99。它被ANSI于2000年三月采用。在C99中包括的特性有:对编译器限制增加了转载 2009-06-17 22:37:00 · 468 阅读 · 0 评论 -
泛型函数-冒泡排序
#ifndef _GEN_H#define _GEN_Htypedef int (*cmp_t)(void *, void *);extern void *max(void *data[], int num, cmp_t cmp);#endif#include#include"gen.h"int binary_search(void *str[], int num原创 2009-05-29 08:03:00 · 874 阅读 · 0 评论 -
代头节点的单脸表模型
typedef struct node *link;struct noed{ int item; link next;};static link head = NULL;link make_node(int item){ link p = malloc(sizeof *p); p->item = item; p->next = next; return原创 2009-05-29 08:11:00 · 672 阅读 · 0 评论 -
堆栈四则运算
头文件1。 #ifndef _TT_H_#define _TT_H_#includechar Precede(char t1,char t2) { char f; switch(t2) { case +: case -:if(t1==(||t1==#) f= <;原创 2009-05-29 07:50:00 · 857 阅读 · 1 评论 -
单链表的冒泡排序算法
#include #include #include #define N 10typedef struct node *link;struct node{ int item; link next;};link NODE(int item, link next){ link t = malloc(sizeof *t); t-原创 2009-05-29 07:38:00 · 2857 阅读 · 0 评论 -
c 队列线性存储
#include #define maxsize 10typedef struct{ int elem[maxsize]; int front,rear;}queue;void init_queue(queue *cp){ cp->front=0; cp->rear=0;}void en_queue(queue *cp,int转载 2009-04-21 23:06:00 · 584 阅读 · 0 评论 -
快速排序
----------------------------------------- * 题目;快速排序 * 描述;快速排序对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要 排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部 分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序 ,整个排序过程可以递归进行,以此达到整个数据变成有序序原创 2009-04-21 23:20:00 · 764 阅读 · 0 评论 -
c语言内存操作函数
一、malloc/calloc名称:Malloc/calloc功能: 动态内存分配函数头文件:#include .h>函数原形:void *malloc(size_t size);void *calloc(size_t num,size_t size);转载 2009-04-21 23:12:00 · 772 阅读 · 0 评论 -
C 编程最佳实践
尽管 C 语言问世已近 30 年,但它的魅力仍未减退。C 语言继续吸引着众多的人们,他们为了编写新的应用程序,或者移植或维护现有的应用程序而必须学习新技能。简介本文是为了满足开发人员的需要而写的。我们总结了一套指南,无论作为开发人员还是顾问,这些指南多年来一直都很好地指导着我们,我们把它们作为建议提供给您,希望对您的工作有所帮助。您也许不赞同其中的某些指南,但我们希转载 2009-09-03 21:47:00 · 633 阅读 · 0 评论