
c语言
文章平均质量分 71
yalizhi123
这个作者很懒,什么都没留下…
展开
-
C中堆管理——浅谈malloc,calloc,realloc函数之间的区别
<br />内存区域可以分为栈,堆,静态存储区和常量存储区。局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取的方式都是由编译器自动执行的。<br /> C 标准函数库提供了许多函数来实现对堆上内存管理,其中包括:malloc函数,free函数,calloc函数和realloc函数。使用这些函数需要包含头文件stdlib.h<br />1. malloc函数<br />malloc函数可以从堆上获得指定字节的内存空间,其函数声明如下:<br />void * malloc(in转载 2010-07-09 20:14:00 · 326 阅读 · 0 评论 -
指针悬挂
<br />下面我们再通过浅显易懂一个小例子来说明什么情况下容易出现指针悬挂。<br /> #include "stdafx.h"<br /> #include "iostream.h"<br /> void main()<br /> {<br /> int *p1 = new int(8); //在内存中分配一个整型数据的空间,并将首地址给P1<br /> int *p2 = new int(9); //在内存中再转载 2010-08-27 17:55:00 · 394 阅读 · 2 评论 -
函数指针的用法
什么是函数指针?<br />函数指针指向的是特殊的数据类型,函数的类型是由其返回的数据类型和其参数列表共同决定的,而函数的名称则不是其类型的一部分。<br /> <br />一个具体函数的名字,如果后面不跟调用符号(即括号),则该名字就是该函数的指针。<br /> <br />函数指针的声明方法<br />// 定义函数指针pf<br />int (*pf)(constint&, constint&); (转载 2010-09-12 13:16:00 · 228 阅读 · 0 评论 -
C指针应用常见缪误
<br />前言:<br /> 一、文章中所说的C指的是ANSI C,是由ANSI/ISO 9899-1990[ANSI 90]进行定义并由[KERN 89]进行描述的。<br /> 所有代码的执行环境如下:<br /> 操作系统:中文版WindowsXP Professional+SP2<br /> 编辑器:VC6或VC7<br /> 文章中所举的例子在上述环境中编译通过,我也会尽量把问题表述清楚,但由于是第一次写东西,再加上本人也是一个初学者水平有限,文中难免有不清或错误的地方转载 2010-09-02 11:34:00 · 187 阅读 · 0 评论 -
C语言内存管理
<br />程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本章的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。 <br />7.1内存分配方式 <br />内存分配方式有三种: <br />(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 <br />(2) 在栈上创建。转载 2010-09-02 10:43:00 · 177 阅读 · 0 评论 -
C语言宏定义技巧(常用宏定义)
<br />view plaincopy to clipboardprint?<br />1,防止一个头文件被重复包含 <br /> <br />#ifndef COMDEF_H <br /> <br />#define COMDEF_H <br /> <br /> //头文件内容 <br /> <br />#endif <br /> <br />2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。 <br /> <br />typ转载 2011-03-18 13:41:00 · 197 阅读 · 0 评论 -
三谈内存对齐
<br />内存对齐(三谈) 收藏 <br /> 第一谈<br />在最近的项目中,我们涉及到了“内存对齐”技术。对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”。“内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上。但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。如果你想了解更加底层的秘密,“内存对齐”对你就不应该原创 2011-03-18 13:50:00 · 216 阅读 · 0 评论 -
常用的宏
<br />1、定义个带参数的宏,使两个参数的值交换,并写出程序,输入两个数作为调用宏时的参数,输出交换后的两个 <br />#define T(a,b) {int c;c=a;a=b;b=c;} <br />2、写出一个宏定义MYALPHA(c),用以判断c是否为字母字符。若是,结果为1,否则结果为0.<br />#define MYALPHA(c) (c>='a'&&c<='z'||c>='A'&& c<='Z')?1:0 <br />----------------------------------原创 2011-05-17 08:53:00 · 231 阅读 · 0 评论 -
armcc和armlink
<br />armlink<br />在介绍armlink的使用方法之前,先介绍要涉及到的一些术语。<br />映像文件(image):是指一个可执行文件,在执行的时候被加载到处理器中。一个映像文件有多个线程。它是ELF(Executable and linking format)格式的。<br />段(Section):描述映像文件的代码或数据块。<br />—RO:是Read-only的简写形式。<br />—RW:是Read-write.的简写形式。<br />—ZI:是Zero-initialize转载 2011-05-28 09:50:00 · 479 阅读 · 0 评论 -
ucgui的字库
1、在UCGUI中有两种类型字体, 一种是等宽字体(Monospaced Font),即字体当中所有字都是同一宽度,它在UCGUI中的相应结构体是GUI_FONT_MONO, 一种是均衡字体(Proportional font), 这种字体中的字都有自己独立的宽度, 字体内的每个转载 2011-08-15 18:49:12 · 551 阅读 · 0 评论 -
C语言中可变参数的用法
<br />我们在C语言编程中会遇到一些参数个数可变的函数,例如printf() <br />这个函数,它的定义是这样的: <br />int printf( const char* format, ...); <br />它除了有一个参数format固定以外,后面跟的参数的个数和类型是 <br />可变的,例如我们可以有以下不同的调用方法: <br />printf("%d",i); <br />printf("%s",s); <br />printf("the numbe转载 2010-08-22 19:51:00 · 200 阅读 · 0 评论 -
linux ulimit的用法
文章分类:操作系统1,说明:<br />ulimit用于shell启动进程所占用的资源.<br />2,类别:<br />shell内建命令<br />3,语法格式:<br />ulimit [-acdfHlmnpsStvw] [size]<br />4,参数介绍:<br />-H 设置硬件资源限制.<br />-S 设置软件资源限制.<br />-a 显示当前所有的资源限制.<br />-c size:设置core文件的最大值.单位:blocks<br />-d转载 2010-08-14 16:22:00 · 248 阅读 · 0 评论 -
字节序、字节对齐
<br />字节序,顾名思意,就是字节的顺序,指的是大于一个字节的数据在内存中的存储方式。字节序跟CPU的型号有关系。常用的字节序有两种,Big endian(大端字节序)和Little endian(小端字节序)。Inter 的X86 CPU用的都是小端字节序,IBM的PowerPC用的是大端字节序。<br /> 以一个int 型整数0x12345678为例,int型在32位操作系统下在内存中占4个字节,比如说从0x4000~0x4003。0x4000是内存中的低位地址,0x4003为高位地址。按小端转载 2010-07-10 12:57:00 · 271 阅读 · 0 评论 -
有条件的字符翻转
有一个字符串,里面有字母,数字和标点,例如"1w4rt,5t7?9u"。要求把里面的字母按原来的顺序倒着排列,别的数字和标点不变,结果应该是"1u4tt,5r7?9w"。 我用c 写了个简单的算法实现,可以参考一下./////////////////////////////////////////////////////////////////////////////////////////#include #include //判读一个字符是否为字母,不区分转载 2010-07-21 18:49:00 · 169 阅读 · 0 评论 -
位运算操作
<br />位运算应用口诀 <br />清零取反要用与,某位置一可用或 <br />若要取反和交换,轻轻松松用异或 <br />移位运算 <br />要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。 <br /> 2 " < <" 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。 <br /> 3 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。 <br />转载 2010-07-21 13:19:00 · 190 阅读 · 0 评论 -
结构体最后的长度为0或者1的数组
<br />在Linux系统里,/usr/include/linux/if_pppox.h里面有这样一个结构:<br />struct pppoe_tag {<br />__u16 tag_type;<br />__u16 tag_len;<br />char tag_data[0];<br />} __attribute ((packed));<br />最 后一个成员为可变长的数组,对于TLV(Type-Length-Value)形式的结构,或者其他需要变长度的结构体,用这种方式定义转载 2010-08-03 18:23:00 · 166 阅读 · 0 评论 -
两个数组组合成一个数组的代码
<br />#include <stdio.h><br /><br />#define M 7<br />#define N 4<br />void merge_sort(int a[],int an,int b[],int bn)<br />{<br /> int c[M+N]={0};<br /> int i=0,j=0,k=0;<br /> while(i<an&&j<bn)<br /> {<br /> if(a[i]<=b[j])原创 2010-08-04 20:04:00 · 241 阅读 · 0 评论 -
sprintf用法解析
<br />sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf<br />在大多数场合可以替代itoa。<br /><br />这样,一个整数的16 进制字符串就很容易得到,但我们在打印16 进制内容<br />时,通常想要一种左边补0 的等宽格式,那该怎么做呢?很简单,在表示宽<br />度的数字前面加个0 就可以了。<br /><br />sprintf(s, "%08X", 4567); //产生:"000011D7"<br /><br />上面以转载 2010-08-05 16:03:00 · 140 阅读 · 0 评论 -
sizeof的用法
<br />sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“<br />辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。<br />但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文有的地方并不<br />适合初学者,甚至都没有必要大作文章。但如果你想“知其然,更知其所以然”的话,<br />那么这篇文章对你或许有所帮助。<br />菜鸟我对C++的掌握尚未深入,其中不乏错误,欢迎各位指正啊<br /><br />1转载 2010-08-05 16:52:00 · 579 阅读 · 0 评论 -
memcpy是如何优化拷贝的
<br />本文主要介绍下memcpy()的工作原理,其中采用的优化方法以及思路值得学习。<br /><br />以下为glibc2.5中的memcpy的源码:<br />void *<br />memcpy (dstpp, srcpp, len)<br /> void *dstpp;<br /> const void *srcpp;<br /> size_t len;<br />{<br />unsigned long int dstp = (lo转载 2010-08-11 11:21:00 · 803 阅读 · 0 评论 -
从结构体中一个成员获得结构体指针——container_of 理解
问题:如何通过结构中的某个变量获取结构本身的指针???关于container_of见kernel.h中:<br />/**<br />* container_of - cast a member of a structure out to the containing structure<br />* @ptr: the pointer to the member.<br />* @type: the type of the container struct this is转载 2010-08-11 09:41:00 · 726 阅读 · 0 评论 -
利用arm 汇编实现strcpy函数
<br />首先是arm汇编代码:p1.s文件:<br />.global strcopy<br />strcopy:<br /> ldrb r2,[r1],#1<br /> strb r2,[r0],#1<br /> cmp r2,#0<br /> bne strcopy<br /> mov pc,lr<br /><br />下面是c文件:p2.c<br /> #include <stdio.h><br />extern原创 2010-08-11 19:51:00 · 837 阅读 · 0 评论 -
嵌入式面试
16那种排序方法最快? (华为面试题)17写出两个排序算法,问哪个好?(威盛)18编一个简单的求n!的程序 (Infineon笔试试题)19用一种编程语言写n!的算法(威盛VIA 2003.11.06 上海笔试试题)20用C语言写一个递归算法求N!;(华为面试题)21给一个C的函数,关于字符串和数组,找出错误;(华为面试题)22防火墙是怎么实现的? (华为面试题)23你对哪方面编程熟悉?(华为面试题)24冒泡排序的原理(新太硬件面题)25操作系统的功能(新太硬件面题)转载 2010-08-16 19:37:00 · 306 阅读 · 0 评论 -
注意fread和fwrite的参数顺序
首先这个问题捆扰了我好长一段时间,但每次都很模糊的看下参数的区别,今天终于弄懂了这个区别 C标准库提供的文件函数fread和fwrite的原型为: #include size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const转载 2011-10-24 18:12:11 · 624 阅读 · 1 评论