【建站服务】黔南淘宝装修/黔南京东店铺设计/黔南拼多多网店装修公司/黔南企业网店开通申请-网店装修设计-域名申请
作者: 风兰 . 阅读量: 4 . 发表时间:2022-09-21 03:02:20
上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
黔南淘宝装修/黔南京东店铺设计/黔南拼多多网店装修公司/黔南企业网店开通申请-网店装修设计

C typedef
C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE:
typedef unsigned char BYTE;
在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写,例如:
BYTE b1, b2;
按照惯例,定义时会大写字母,以便提醒用户类型名称是一个象征性的缩写,但您也可以使用小写字母,如下:
typedef unsigned char byte;
您也可以使用 typedef 来为用户自定义的数据类型取一个新的名字。例如,您可以对结构体使用 typedef 来定义一个新的数据类型名字,然后使用这个新的数据类型来直接定义结构变量,如下:
实例
#include <stdio.h>
#include <string.h>
typedef struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
} Book;
int main( )
{
Book book;
strcpy( book.title, "C 教程");
strcpy( book.author, "Runoob");
strcpy( book.subject, "编程语言");
book.book_id = 12345;
printf( "书标题 : %s ", book.title);
printf( "书作者 : %s ", book.author);
printf( "书类目 : %s ", book.subject);
printf( "书 ID : %d ", book.book_id);
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
书标题 : C 教程
书作者 : Runoob
书类目 : 编程语言
书 ID : 12345
typedef vs #define
#define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:
typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。
下面是 #define 的最简单的用法:
实例
#include <stdio.h>
#define TRUE 1
#define FALSE 0
int main( )
{
printf( "TRUE 的值: %d ", TRUE);
printf( "FALSE 的值: %d ", FALSE);
return 0;
黔南淘宝装修/黔南京东店铺设计/黔南拼多多网店装修公司/黔南企业网店开通申请-网店装修设计
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)
关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站



输出,可以验证以下结论:
(1)结构体内存分配原则:
(2)定义位域时,各个成员的类型最好保持一致,比如都用char,或都用int,不要混合使用,这样才能达到节省内存空间的目的。
xkl
923***865@qq.com
原则一:结构体中元素按照定义顺序存放到内存中,但并不是紧密排列。从结构体存储的首地址开始 ,每一个元素存入内存中时,它都会认为内存是以自己的宽度来划分空间的,因此元素存放的位置一定会在自己大小的整数倍上开始。
原则二: 在原则一的基础上,检查计算出的存储单元是否为所有元素中最宽的元素长度的整数倍。若是,则结束;否则,将其补齐为它的整数倍。
木子李
Li1***052573@163.com
// 二进制表示为 1000 有四位,超出Age.age = 8;printf("Age.age : %d ", Age.age);超出范围并不是直接丢弃,而是保留对应的 3 位的值。
比如 8 是 00001000,按照位域,对应 3 位的值是 000,所以打印结果是 0;
但是 9 是 00001001,按照位域,对应 3 位的值是 001,所以打印结果是 1;
同理 10 是 00001010,按照位域,对应 3 位的值是 010,所以打印结果是 2;
木子李
Li1***052573@163.com
xuxing
176***6295@qq.com
三楼@xkl,结果是:
讲一下为什么 struct ONE_BYTE,其 3 个位域都是 char 类型,所以可以按照位的顺序存储(不用分字节),1+1+4=6 位,占用 1 个字节。
struct TWO_BYTE,道理同上,4+4+4+4=16 位 =2 个字节。
struct THREE_BYTE,道理同上,4*5=20 位,占 3 个字节(不足的 4 位补 0)。
struct FOUR_BYTE,其 2 个位域都是 int 类型,所以可以按照位的顺序存储(不用分字节),一个 int 类型占 4 个字节,刚好 16+16=32 位 =4 个字节。为 int 类型所占字节数的 1 倍(整数倍),所以 sizeof(four_byte)=4。
struct EIGHT_BYTE,其 2 个位域为不同的类型,所以它们的位值不能写到一个字节里面(不能按连续字节存储),那么,ccc1 就占第 1 个字节(地址0)的第 1 位;那么再来找 ccc2 存储的字节,因为其为 int 型,而 int 型占用 4 个字节,因此系统默认就要从 4 的整数倍的地址存它,也就是说要么存第 1 到第 4 个字节(地址0-地址3),要么存第 5 到第 8 个字节(地址4-地址7),……,以此类推,但是第 1 个字节(地址0),已经存了 ccc1 了,所以它就只能存第 5 到第 8 个字节,至于其前面的 3 个字节,补0;因此最后判断 eight_byte 占用 8 个字节,最后验证 8 个字节数刚好是 EIGHT_BYTE 结构体中占用最宽字节数的类型(int型)——4个字节的整数倍(2倍),所以就是 sizeof(eight_byte)=8。
xuxing
176***6295@qq.com