亲身经历的C语言面试题1

2020-10-12  本文已影响0人  那个混子

今天早上又视频面试了一家公司,下面分享一下人家给我的面试题。

题目 :一、写出如下程序的输出结果。 #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、其他知识点

结构体或者类的自身对齐值:其数据成员中自身对齐值最大的那个值。
数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。

答案?

大家看了上面的题,觉得答案是多少呢?在下面讨论区打出你们的答案..............

上一篇 下一篇

猜你喜欢

热点阅读