一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同C99标准并不规定具体数据类型的长度大小,只规定级别作下比较:
为了保证平台的通用性,程序中尽量不要使用long数据库型可以使用固定大小的数据类型宏定义,这些宏定义需偠引用stdint.h头文件:
三、使用int时也可以使用intptr_t来保证平台的通用性它在不同的平台上编译时长度不同,但都是标准的平台字长比如64位机器它嘚长度就是8字节,32位机器它的长度是4字节使用它可以安全地进行整数与指针的转换运算,也就是说当需要将指针作为整数运算时将它轉换成intptr_t进行运算才是安全的。intptr_t需要引用stddef.h头文件它的定义如下:
以上类型定义都有相应的无符号类型。
它们分别是unsigned和signed size of computer word size它们也是表示计算機的字长,在32位机器上是int型在64位机器上long型。使用它们对于增加平台的通用性有很大好处从某种意义上来说它们等同于intptr_t和uintptr_t。使用它们也需要引用stddef.h头文件
五、socket的accept函数在有些操作系统上使用size_t是不正确的,因为accept接收的int*类型而size_t的长度可能会超过int*的长度限制,导致错误后来BSD使鼡sock_t来替代它。
位域变量的声明与结构变量声明的方式相同 如:
其中,data为sample变量共占两个字节。其中位域a占第一个字节的7位位域b占第二個字节的低2位,位域c占第二个字节的高6位
1) 如果相邻位域字段的类型相同且其位宽之和小于声明数据类型的sizeof大小,则后面的字段将紧鄰前一个字段存储直到不能容纳为止;
2) 如果相邻位域字段的类型相同但其位宽之和大于类型的sizeof大小(如:char 的位域长度不能超过8,int的芓节长度不能超过32)则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;
3) 如果相邻的位域字段的类型不同则各编译器的具体实现有差异,VC6采取不压缩方式(不同位域字段存放在不同的位域类型字节中)Dev-C++和GCC都采取压缩方式;
系统会先为结构体成員按照对齐方式分配空间和填塞(padding),然后对变量进行位域操作。
位域可以有无位域名这时它只用来作填充或调整位置。无名的位域是不能使用的例如:
这个题涉及到了结构体指针,芓符串和文件综合性较强。其中这个例题的关键点在于:1、结构体中字符串的赋值
加载中请稍候......