优视科技一道指针笔试题目
今天晚上参加优视(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]+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]+32,这里str[2]取出来的是一个地址,故st[2]的偏移量(相对于str[0])为80,而str[2]相对str[2]偏移了8个字节,故str[2]的相对偏移量为88,加上32之后变为偏移量为120.、
4>由3的分析知指针p现在指向的地址相对偏移量为120,故p-((char*)(st)) 为120,这是由于(char*)st指向 数组开始地址,由于初始化的st为空,帮指针指向内容为空,故p-((char*)(st))=120.
-
2016年牡丹江医学院复试分数线公布
牡丹江医学院已经将2016年复试分数线公布了,有需要的朋友们可以看看一看,下面是小编搜集整理的相关资料,欢迎阅读。2016年牡丹江医学院硕士研究生复试分数线与国家初试成绩要求相同。学科门类(专业)名称A类地区考生总分单科(满分=100分)单科(满分>100分)理学[07]2853959...
-
2017考研英语新题型做题方法
新题型是考研英语复习的一大部分,下面小编整理分析了新题型的做题方法,希望对2017年考生有所帮助。对新题型部分的要求也是一样,仍是考查考生对诸如连贯性、一致性等语段特征以及文章结构的理解。本部分有三种备选题型,分别为:1)在一篇总长度为500-600词的文章中有5...
-
2017考研英语语法:分词
分词有现在分词和过去分词两种。考生们在复习考研英语的时候要对分词进行充分了解,下面就跟着小编一起去了解关于分词的语法吧!作为谓语,现在分词和be一起构成进行时;过去分词和be一起构成被动语态,和have一起构成完成时。例如:IamreadinganovelbyMaupassant.我正...
-
考研现场确认的四大细节
下面是小编为大家整理的考研现场确认的四大细节,欢迎大家的阅读。一、带齐证件和材料:在11月10日之前,做好一切准备工作。一定记住,学校老师办公和现场确认都只有五天时间。现在有问题,还来得及处理,不要等到最后一天才发现有问题。现场确认就是为了核对考生信息,以防...