青岛网站优化公司哪家好,线上推广的方式,学做ps的网站有哪些,信息化网站建设引言文章目录 前言一、不同编译器二、C51* 指针型 三、sizeof结构体联合体 前言
在C语言中#xff0c;数据类型指的是用于声明不同类型的变量或者函数的一个广泛的系统。变量的类型决定了变量存储占用的空间 一、不同编译器
类型16位编译器大小32位编译器大小64位编译器大小char… 文章目录 前言一、不同编译器二、C51* 指针型 三、sizeof结构体联合体 前言
在C语言中数据类型指的是用于声明不同类型的变量或者函数的一个广泛的系统。变量的类型决定了变量存储占用的空间 一、不同编译器
类型16位编译器大小32位编译器大小64位编译器大小char1个字节1个字节1个字节char*即指针变量2个字节4个字节32位的寻址空间是2^32,即32个bit也就是4个字节8个字节short int2个字节2个字节2个字节int2个字节4个字节4个字节unsigned int2个字节4个字节4个字节float4个字节4个字节4个字节double8个字节8个字节8个字节long4个字节4个字节8个字节long long8个字节8个字节8个字节unsigned long4个字节4个字节8个字节
在32位编译器下
sizeof(char):1 sizeof(short):2sizeof(int):4sizeof(long):4sizeof(float):4sizeof(double):8sizeof(long long):8sizeof(p):4,(p为指针)指针用来记录另一个对象的地址在32位计算机中一个指针变量的返回值必定是4。 指针变量的sizeof值与指针所指的对象没有任何关系。
二、C51
C51属于8位单片机 在单片机的C语言中我们默认的规则如下short int即为int,long int即为long,前面若无unsigned符号则一律认为是signed型。
* 指针型
指针型本身就是一个变量在这个变量中存放的指向另一个数据的地址。这个指针变量要占用一定的内存单元对不同的处理器其长度不一样在C51中它的长度一般为1~3个字节。
三、sizeof
sizeof是C语言的一种单目操作符如C语言的其他操作符、–等。它并不是函数。sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定。
1.用于数据类型 使用形式sizeof(type) 数据类型必须使用括号括住
2.用于变量 使用形式sizeof(变量名) 或 sizeof 变量名变量名可以不用括号括住 sizeof 操作符不能用于函数类型不完全类型或位字段不完全类型指具有未知存储大小的数据类型如未知存储大小的数组类型、未知内容的结构或联合类型、void 类型等。
结构体
当没有定义 #pragma pack(value) 这种指定 value 字节进行对齐时结构体的 sizeof 涉及到字节对齐的问题一般满足三个准则 1结构体变量的首地址能够被其最大基本类型成员的大小所整除。
2结构体的每个成员相对于结构体首地址的偏移量都是成员大小的整数倍。
3结构体的总大小为结构体最大基本类型成员大小的整数倍。 字节对齐在 char 后会填充三个字节 空结构体会占一个字节的空间用于占位
typedef struct
{char a[5];int b;double c;
}Test;没有指定字节对齐。在结构体成员中a占5个字节b占4个字节c占8个字节。54817.但是17不是 8的倍数所以(53)(44)824.故占24个字节。当定义了 #pragma pack(value)以 value字节进行对齐时它的计算规则如下整体的大小必须为 value 的最小整数倍。
#pragma pack(4)
typedef struct
{char a[5];int b;double c;
}Test;指定4字节对齐所以(53)4820。故占20个字节。#pragma pack(2)
typedef struct
{char a[5];int b;double c;
}Test;如果指定2字节对齐那么就是(51)4818个字节。联合体
联合体各成员共享一个内存联合体的大小取决于他所有成员中占用空间最大的一个成员的大小。并且对于复合数据类型如unionstruct, class 的对齐方式为成员中最大成员的对齐方式。
union u //u的大小是其中最大的double类型成员a所以sizeof(u) sizeof(double) 8;
{double a;int b;
};union u1 // u1的大小是char[13] 类型的数组但由于另一个成员int b ,所以要以4对齐13以4对齐就是补3位到16
{char a[13];int b;
};union u2 // u2的大小是char[13]类型的数组不需要补齐所以长度为13
{char a[13];char b;
};