今天早上又视频面试了一家公司,下面分享一下人家给我的面试题。
题目 :一、写出如下程序的输出结果。 #include <iostream.h> //标准的输入输出流头文件
#pragma pack(8) / /8字节对齐方式
struct example1 //定义结构体
{
short a;
long b; };
struct example2
{
char c;
example1 struct1;
short e; };
#pragma pack() /*取消指定对齐,恢复缺省对齐,等价于#pragma pack(pop)*/
int main(int argc, char* argv[])
{
example2 struct2;
cout << sizeof(example1) << endl;
cout << sizeof(example2) << endl;
cout << (unsigned int)(&struct2.struct1) - (unsigned int)(&struct2) << endl;
return 0;
}
核心考点
考察的是变量对齐方式设置,和结构体的大小计算
涉及的内容:
1、iostream.h头文件:标准的输入输出流头文件。用来声明一些用来在标准输入输出设备上进行输入输出操作的对象。
(1)cin>>"要输入的内容"
(2)cout<<"要输出的内容"
2、对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,long类型,其自身对齐值为4,double,long long类型,其自身对齐值为8,单位字节。
在32位平台下,基础常见的数据类型大小:
char: 8位储存单元--1字节
int: 32位储存单元---4字节数
float:4字节数
short:2字节数
long: 4字节数
double:8字节数
long double:8字节数
3、#pragma pack(8) 和 #pragma pack()
编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式。
n字节对齐就是说变量存放的起始地址的偏移量有两种情况:
第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,
第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构的总大小也有个约束条件,
分下面两种情况:
如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数;
否则必须为n的倍数。
4、sizeof() 函数
在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
4、其他知识点
结构体或者类的自身对齐值:其数据成员中自身对齐值最大的那个值。
数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。
答案?
大家看了上面的题,觉得答案是多少呢?在下面讨论区打出你们的答案..............
网友评论