c语言
爱吃芋头
没有
展开
-
extern
<br />extern 变量 在一个源文件里定义了一个数组:char a[6]; <br /> 在另外一个文件里用下列语句进行了声明:extern char *a; <br /> 请问,这样可以吗? <br /> 答案与分析: <br /> 1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。 <br原创 2010-12-17 10:51:00 · 723 阅读 · 0 评论 -
文本与二进制方式打开文件的区别
<br /> 文本文件也叫做ASCII码文件,与以‘文本方式’打开文件不是同一个概念!文本文件存储的是ASSCII码字符,即存储在磁盘上只占用二进制的0x20--0x7e。另外,还有回车(0x0d),换行(0x0a),TAB(0x09)等,所以有可压缩的空间。<br /> 换行和回车是不同的,而且在不同的操作系统,解释也不相同。‘/n’一般会操作系统被翻译成"行的结束",即LF(Line-Feed);‘/r’会被翻译成"回?,即CR(Cariage-Return)<br /> 回车(CR)和换行原创 2010-11-11 10:49:00 · 1487 阅读 · 1 评论 -
求结构体成员的偏移量
<br /> <br />我们知道,在TCP/IP协议中,当我发送一个消息的时候,我必须要定义一个消息头,然后和消息体一起发送,那如何从一个消息中快速定位到消息体呢?<br />举个例子:<br />首先定义一个消息:<br />typedef struct tagT_RUDP<br />{<br /> int a;<br /> int b;<br /> int c;<br /> unsigned char usr[50];<br />}T_RUDP;<br />定义一个求偏移量的宏:<br />#defi原创 2010-11-10 15:58:00 · 690 阅读 · 0 评论 -
C语言大小端
1 大小端问题在计算机中存在两种字节序:大端和小端,大端是指计算机中表示一个数时高位在前,低位在后,也就是说低地址存放数据的高位部分,而高地址存放数据的低位部 分,如PPC就是属于这种类型的;相对的,小端是指计算机存储数据时低位在前,高位在后,即低地址存放数据的低位部分,高地址存放数据的高位部分,我们天 天用的X86 CPU就是这样的。 例如: 0x12345678在大小端系统中分别表示如下: Address : 0x500 0x501 0x502 0x503转载 2010-11-03 14:30:00 · 823 阅读 · 0 评论 -
typedef
<br />typedef的语法描述 <br />在现实生活中,信息的概念可能是长度,数量和面积等。在C语言中,信息被抽象为int、float和 double<br />等基本数据类型。从基本数据类型名称上,不能够看出其所代表的物理属性,并且int、float和double<br />为系统关键字,不可以修改。为 了解决用户自定义数据类型名称的需求,C语言中引入类型重定义语句<br />typedef,可以为数据类型定义新的类型名称,从而丰富数据类型所包含的属性信息。 <br />typedef的语法描述原创 2010-12-24 11:11:00 · 1550 阅读 · 0 评论 -
const
<br />C中CONST的使用: <br /> 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。 <br /> 问题:const变量 & 常量 <br /> 为什么下面的例子在使用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢? <br /> const int n = 5; <br /> int a[n]; <br /> 答案与分析: <br /> 1)、这个问题讨论的是“常量”与“只读变量”的区别。常量原创 2010-12-24 11:10:00 · 849 阅读 · 2 评论 -
C语言位域
<br /><br />位域 : <br />有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位域的定义和位域变量的说明位域定义与结构定义相转载 2010-11-03 14:36:00 · 467 阅读 · 0 评论 -
c语言结构体对齐
<br /><br />C语言结构体对齐也是老生常谈的话题了。基本上是面试题的必考题。结构体到底怎样对齐?下面总结了对齐原则,在没有#pragma pack宏的情况下:<br />原则1、普通数据成员对齐规则:第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。<br />原则2、结构体成员对齐规则:如果一个结构里有某些结构体成员,则该结构体成员要从其内部最大元素大小的整数倍地址开始存储。(stru转载 2010-11-03 14:02:00 · 678 阅读 · 0 评论 -
c语言共用体对齐
<br /><br />还从网上找到共用体内存分配原则的文章,下面列几个例子说明:<br />1.Union data1{<br /> double d;<br /> int i;<br /> char c1;<br /> char c2[9]; <br /> };<br /> sizeof(union data1)的值为16.在编译器默认转载 2010-11-03 14:04:00 · 1230 阅读 · 1 评论 -
typedef用法小结
<br />在C语言的情况下,与C++稍有出入。 <br /> 这两天在看程序的时候,发现很多地方都用到typedef,在结构体定义,还有一些数组等地方都大量的用到.但是有些地方还不是很清楚,今天下午,就想好好研究一下.上网搜了一下,有不少资料.归纳一下: <br /> 来源一:Using typedef to Curb Miscreant Code <br /> Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用 typedef 能为代码带来意想不到的好处,通原创 2010-12-22 18:26:00 · 480 阅读 · 0 评论 -
const用法大全
<br />面向对象是C++的重要特性.<br />但是c++在c的基础上新增加的几点优化也是很耀眼的<br />就const直接可以取代c中的#define<br />以下几点很重要,学不好后果也也很严重<br /> <br />const<br />1. 限定符声明变量只能被读<br /> const int i=5;<br /> int j=0;<br /> ...<br /> i=j; //非法,导致编译错误<br /> j=i; //合法<br />2. 必须初始化<b转载 2010-11-15 16:47:00 · 817 阅读 · 0 评论