优视科技一道指针笔试题目

时间:2020-11-01 10:28:05 笔试题目 我要投稿

优视科技一道指针笔试题目

  今天晚上参加优视(UC)的笔试,我报了一个c++的软件开发工程师,考前我就想这次一定会考指针题目,所以事先就看了很多关于指针的内容,果然,还是出了一道指针,并且包含有结构体struct,题目是这样的,前提是在一台i386的机子上运行

优视科技一道指针笔试题目

  #include

  struct a

  {

  int b;

  short*pd;

  char str[32];

  };

  a st[16];

  int _tmain(int argc, _TCHAR* argv[])

  {

  char * p= (char*)(st[2].str+32);

  cout<

  return 0;

  }

  问你输出结果是什么?

  哇!!!!,看到这里是不是感觉到有点头大呢!虽然考前看了很多指针的东西,但是到这里却还是头大,好了,接下来我就认真分析一下这道题目:

  1> 看准前提条件,这是一台I386的机子,这个条件很用,它说明了我们运行平台是一个32位机,因此int类型占用4个字节32位。

  2> 接下来我们分析一下struct类型,前面一个int b, 占用4个字节,中间一个short类型占用两个字节,后面一个char类型的数组,当然是占用32个字节,到这里你认为分析完了吗,很不幸,如果你只分析到这一步,肯定得不到正确结果,现在让我们来想一想struct类型在编译之后数据存放地址的对齐问题,这涉及到一个原则就是sizeof(struct_name)一定是结构体中最长类型的'整数倍,即sizeof(a)%4==0,这样计算则可知sizeof(a)==40,这种对齐方式是为了计算机计算时的方便,是编译器性能优化的一部分,具体细节你可以去google一下,上面的计算方式很简单,但是并不通用。

  3>经过第二步的分析我们知道a的大小为40个字节,接下来我们分析st[2].str+32,这里str[2].str取出来的是一个地址,故st[2].str的偏移量(相对于str[0])为80,而str[2].str相对str[2]偏移了8个字节,故str[2].str的相对偏移量为88,加上32之后变为偏移量为120.、

  4>由3的分析知指针p现在指向的地址相对偏移量为120,故p-((char*)(st)) 为120,这是由于(char*)st指向 数组开始地址,由于初始化的st为空,帮指针指向内容为空,故p-((char*)(st))=120.

【优视科技一道指针笔试题目】相关文章:

优纳科技软件测试面试题目11-19

优捷Java开发工程师笔试题目11-17

上海中网科技笔试题目11-19

科技企业最怪异笔试题目11-17

大唐和亚信科技笔试题目12-03

蓝盟科技面试笔试题目11-16

中国移动网优中心的笔试题目08-29

酷瑞(上海)网络科技笔试题目11-19

深圳讯呼科技有限公司笔试题目11-15