设为首页 加入收藏

TOP

C/C++基础笔试题1.0(字节对齐)
2015-07-24 05:33:58 来源: 作者: 【 】 浏览:5
Tags:C/C 基础 试题 1.0 字节

传说中博文标题带有笔试、面试等点击率都会很高呢?我也试试!

众生皆是码农命,我们这种即将战秋招的渣渣,既没有超凡的能力,也没有流弊的项目,怎么破?

唯独苦苦怒刷基础,笔试题,面试题,因为以前常常刷OJ,所以很多面试题的编程题倒是可以解,但是笔试题或者基础题我就不记得了,唯独慢慢回想。

况且,写这种面试题,谁能写得赢JULY神。

今天首先讲得是字节对齐

注意:我是一个渣,所以我只能按自己的理解来说了(要不然怎么会这么惨呢?)。如果你想看大神的解释,请看这里

来看个题目

#include 
  
   
using namespace std;
struct A{
   char b; 
   int a;  
};
int main()
{

    A a;
    cout<
   
    
请问上述输出的是什么呢?A.5,B.6.C7.D.8

答案是:D,如果你选A,那么恭喜你,你不知道什么叫字节对齐。(我也不知道,?(???)?)

按我的理解来说,在结构体中,分配的空间,是有“格式”的,好比宿舍,我们住人的时候,床总是一样的,有些人可能会短,有些人可能会比较长,但是他们谁的床要一样的,为什么?一就是统一,二就是高效(统一是为了不同硬件上做出的效果一致,高效是源于读取规律性强)。

我们的床的长度决定于“最长的人的长度”(奇怪,为什么我总是要用长短来形容人,不科学。)

之后我们就可以分配床了,但是有时候会出现几个人睡一张床,看例子吧。

例子1

#include 
     
      
using namespace std;
struct A{
   char b;
   int a;

};
struct B{
   char b;
   char c;
   int a;
};
struct C{
   char b,c,d;
   int a;
};
int main()
{
    A a;
    B b;
    C c;
    cout<
      
       
输出的结果是8,8,8,

为什么?

最长的是4,那么就是4个字节为一张床啦,你能一起睡就一起睡,不能就自己再开一张呗。

最后来看一看这个题目,你觉得输出是什么?

之后你自己再用你的机器跑一下试试。

#include 
        
         
using namespace std;
struct A{//四个字节对齐
   char b;
   int a;

};
struct B{//四个字节对齐,b,c"共床"
   char b;
   char c;
   int a;
};
struct C{//d开“新床”
   char b,c;
   int a;
   char d;
};
struct D{//8字节对齐,short占两个字节的!
   short a;
   int b;
   long long c;
};
struct E{//a开新床
   int b;
   long long c;
   short a;
};
struct F{//什么都没有,也要占一个
};
int main()
{
    A a;
    B b;
    C c;
    D d;
    E e;
    F f;
    cout<
         
          
如果你有什么疑问,或者有什么不对的,记得评论指出我,不然难得会看我博客的人都被害了~

最后,想跟大家说,有些知识,不是别人说出来就是对的,要自己试,自己试觉得有理就是有理

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 2767 Proving Equivalences (.. 下一篇poj 3466 A Simple Problem with ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: