概述
一、概念
1、结构体
struct 结构名 {
数据类型 成员名;
数据类型 成员名;
…
};
成员表由若干个成员组成,每个成员都是该结构的一个组成部分,对每个成员也必须做类型声明。
使用范例:
#include<iostream>
#include<string.h>
using namespace std;
struct student{
int num;
char name[20];
int age;
};
int main(){
student stu1;
stu1.num=1;
char temp[20]=“xiaoming";
strcpy(stu1.name, temp);
stu1.age=10;
cout<<stu1.name<<stu1.num<<stu1.age<<endl;
}
2、共用体
一个共用体里可定义多种不同数据类型,但这些数据共享一段内存(同一时间只能存一个成员变量的值)(节省空间)(类似于时分复用)
union 共用体类型名{
数据类型 成员名;
数据类型 成员名;
…
}变量名;
注:big endian和littile endian的内存地址增长方向
big endian:指低地址存放最高有效字节。目前几乎所有网络协议都采用big endian的方式来传输数据,因此big endian也叫网络字节序。
3、枚举
在“枚举”类型的定义中列举出所有可能的取值。
声明方式:
enum 枚举类型名 {枚举常量表列};
eg. 设有变量a、b、c是枚举类型weekday,可采用下列任一种方式:
1)
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
enum weekday a, b, c;
2)
enum weekday{ sun,mou,tue,wed,thu,fri,sat }a, b, c;
3)
enum { sun,mou,tue,wed,thu,fri,sat }a, b, c;
特别注意:
1)枚举值是常量,不是变量。不能在程序中用赋值语句再对其进行赋值。
eg:对枚举weekday的元素再作一下赋值,都是错误的。
sun=5;
mon=2;
sum=mon;
2)只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。
如下语句是正确的:
a=sum;
b=mon;
以下语句是错误的:
a=0;
b=1;
3)如一定要把数值赋予枚举变量,则必须用强制类型转换。
如:
a=(enum weekday) 2;
其意义是将顺序号为2 的枚举元素赋予枚举变量a,相当于:
a=tue;
4)枚举元素既不是字符常量也不是字符串常量,在使用时不要加单、双引号。
二、结构体、共用体在内存单元占用字节数的计算
一般64位计算机上各数据类型所占的存储空间如下:(注:bit比特、byte字节)
(1)char:8bit=1byte
(2)short:16bit=2byte
(3)int:32bit=4byte
(4)long:64bit=8byte
(5)float:32bit=4byte
(6)double:64bit=8byte
(7)long long:64bit=8byte(属于int型)
注:其中long类型在32位机器上只占4byte,其他不变。
1、union的字节数计算
#include<iostream>
using namespace std;
union A {
int a[5];
char b;
double c;
};
int main() {
cout<<sizeof(A)<<endl;
return 0;
}
结果:24
union中变量共用内存,应以最长的为准。但并不是预想的20(int a[5], 5*4=20byte),这是因为在共用体内变量的默认内存对齐方式,必须以最长的double(8byte)对齐,也就是应该是sizeof(A)=24。所以将共用体中的int a[5]改成int a[6]后,结果仍然不变。但如果将int a[5]改成int a[7],结果就变成32。
通俗解释:如果是20,那么可以存几个double型?两个半吗?所以要延伸其空间,使其大于20但又刚好满足其他成员的整数倍。
2、struct的计算方法
#include
using namespace std;
struct B {
char a;
double b;
int c;
}test_struct_b;
int main() {
cout<<sizeof(test_struct_b)<<endl;
return 0;
}
结果:24
详见《后台开发核心技术与应用实践》19页。
最后
以上就是敏感鸡翅为你收集整理的C++知识——3、结构体、共用体、枚举的全部内容,希望文章能够帮你解决C++知识——3、结构体、共用体、枚举所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复