多益网络笔试一半的题考指针,元方,你怎么看!!

kaiyuan_ky 2012-10-26 05:49:25
1.
struct {
int a;
char b;
long c;
short d;
short e[5];
}*p;

p=0x1000000;

p+0x200=?
(unsigned long*)p+0x200=?
(unsigned char*)p+0x200=?

2.
各种指针,函数指针,数组指针,指针数组,还有整合在起来的指针,二级指针,

3
关于数组与指针的关系,好几个题。
char c[5],*p;
int array[100];
int **p;
p = &array;

4
改错还是指针
swap(int *p1,int*p2)
{
int *p = *p1;
*p1=*p2;
*p2=*p;
}

GetMemory(char*p)
{p=(char*)malloc(100);
}

5
基本没考数据结构,算法。
没考c++,没有面向对象的。

一个游戏公司用这样考吗?

...全文
2823 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzzy101010 2013-10-18
  • 打赏
  • 举报
回复
fuck。。java的。。当天就阵亡了。。不过有幸进了2笔。。
xxz568430220xxz 2012-11-12
  • 打赏
  • 举报
回复
指针不可怕,蛮基础的,线程才纠结
tkminigame 2012-11-10
  • 打赏
  • 举报
回复
为什么要考指针,因为指针比你提到的那些概念要基础得多。
漫步者、 2012-11-10
  • 打赏
  • 举报
回复
Mark
bolan9999 2012-11-10
  • 打赏
  • 举报
回复
回帖总手残, 根据对齐和补齐的规则,结构体算出来是24的长度换成十六进制位18(步进24),然后把0x200*18就是3000,最后就得0x1003000
bolan9999 2012-11-10
  • 打赏
  • 举报
回复
第一题 0x1003000 0x1000200 0x1000200 第三题 应该把 int **p;改成int (*p)[100]; 第四题 应该把int *p;改成int p或者改成int *p=(int*)malloc(4);(后面这种方法注意函数尾部释放p) GetMemory(char* p);应改成GetMemory(char*& p); 题解: 第一题: 根据对齐和补齐的规则,结构体算出来是24的长度换成十六进制位18(步进24),然后把0x200*18就是3000,最后就得0x3000 第二空,转成数字了都,直接加起来(你题抄错了应该是(unsigned long)) 第三空,转成unsigned char*后,步进是1,按照上面的算法得0x1000200 第三题: int **p;是指向指针的指针,&array代表该数组的地址,两者是不能用=的,改成int (*p)[100]后表示p是一个指针 ,指向的是某个数组,该数组是由100个整数组成的 第四题 int *p;没有指向任何东西(野指针),下面就直接取p的目标肯定不对 下面那个题,因为char* p改变的只是本函数内的指针,要使他外面的变量也要改变必须用引用char*& p;或者用二级指针char **p;不过下面的p=(char*)malloc(100);也要相应地改成 *p=(char*)malloc(100);
washingtonDC 2012-11-01
  • 打赏
  • 举报
回复
第一题我在电脑上试了一下,源程序如下:
--------------------------------------
1 #include <stdio.h>
2 #include <stdlib.h>
3 #define offset(x) &(((struct demo*)(0))->x)
4 int main(int argc, char *argv[]){
5 struct demo {int a;
6 char b;
7 long c;
8 short d;
9 short e[5];
10 }*p;
11 p=0x1000000;
12 printf("%ld\n",sizeof(struct demo));
13 printf("%p\n",offset(a));
14 printf("%p\n",offset(b));
15 printf("%p\n",offset(c));
16 printf("%p\n",offset(d));
17 printf("%p\n",offset(e));
18 printf("%p\n",p+0x200);
19 printf("%p\n",(unsigned long*)p+0x200);
20 printf("%p\n",(unsigned char*)p+0x200);
21 return 0;
22 }

----------------------
运行之后结果如下:
32
(nil)
0x4
0x8
0x10
0x12
0x1004000
0x1001000
0x1000200
----------------
看到运行结果后才发现这道题目有几个自己没考虑到的问题:
1.sizeof(struct demo)是32,不同的平台会得到不同的数字,这与ANSI没有规定死int,long等的长度,以及内存的地址对齐相关。
2.我没有注意到0x表示和十进制的区别,比如32转换成十六进制就是0x20,答案是ox进制,我先入之见马上看出十进制。
-----------------
说明:为了求结构体中各成员的位移,用了一个宏#define offset(x) &(((struct demo*)(0))->x)
也就是先把地址0转换为指向结构体的指针,那么其成员所在的地址就是其在结构体中的位移了
------------------
Panda_熊猫 2012-10-31
  • 打赏
  • 举报
回复
好贴子。

不过 long类型长度 不确定。规定只是long类型长度不小于int。
在ubuntu上运行了下是8字节。
在Redhat上是4字节。
  • 打赏
  • 举报
回复
你是青岛的吧 今天刚参加了终面。。又问我没答上来的三角形问题。。结果我又没答上来。。。
thunk123 2012-10-30
  • 打赏
  • 举报
回复
呵呵,可能你的职位并不是game dev
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
编译执行后的结果是
1003000
1000800
1000200

第一个不理解。。难道那个结构体的大小是15不成?
[/Quote]

明白了。。。结构体大小是24,转换成16进制是就是15.
p+0x200 在16进制的运算下,表示p移动了200个结构体的长度,即p+200*15 = 1003000
  • 打赏
  • 举报
回复
编译执行后的结果是
1003000
1000800
1000200

第一个不理解。。难道那个结构体的大小是15不成?
hondely 2012-10-30
  • 打赏
  • 举报
回复
求指教呀,11.22有宣讲会,求机试题
letdehunt 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 7 楼 的回复:

引用 6 楼 的回复:

第一题求破。
要算字节对齐,然后偏移么?
有点晕,不会。求大神教育。

第一题很垃圾。
你不用管P的那个struct内容和什么字节对齐的问题。
只要简单的加法算出0x1000000 + 0x200就行。
后面的几个也是迷惑你而已,他们的结果都一样。
没有区别。


我在电脑上试了,不一样的,但是不懂。
[/Quote]

第一个是0x1000000+(0x200*24),那个struct的大小应该是24。第二个就直接加,不用乘24。第三个乘1,相当于直接加,结果和第二个一样。
kaiyuan_ky 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:

第一题求破。
要算字节对齐,然后偏移么?
有点晕,不会。求大神教育。

第一题很垃圾。
你不用管P的那个struct内容和什么字节对齐的问题。
只要简单的加法算出0x1000000 + 0x200就行。
后面的几个也是迷惑你而已,他们的结果都一样。
没有区别。
[/Quote]

我在电脑上试了,不一样的,但是不懂。
jgwen 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:

第一题求破。
要算字节对齐,然后偏移么?
有点晕,不会。求大神教育。

第一题很垃圾。
你不用管P的那个struct内容和什么字节对齐的问题。
只要简单的加法算出0x1000000 + 0x200就行。
后面的几个也是迷惑你而已,他们的结果都一样。
没有区别。
[/Quote]
我想太多了。
chris君 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 9 楼 的回复:

引用 7 楼 的回复:

引用 6 楼 的回复:

第一题求破。
要算字节对齐,然后偏移么?
有点晕,不会。求大神教育。

第一题很垃圾。
你不用管P的那个struct内容和什么字节对齐的问题。
只要简单的加法算出0x1000000 + 0x200就行。
后面的几个也是迷惑你而已,他们的结果都一样。
没有区别。


我在电脑上试了……
[/Quote]
求指教,后面为什么不是sizeof(unsigned long)*200?
jgwen 2012-10-28
  • 打赏
  • 举报
回复
第一题求破。
要算字节对齐,然后偏移么?
有点晕,不会。求大神教育。
奋斗吧 2012-10-27
  • 打赏
  • 举报
回复
呵呵,去年我也去了,结果是机试阵亡了,机试才考数据结构和算法的,笔试都是这些东西
yyz_breeze 2012-10-27
  • 打赏
  • 举报
回复
请问机试三道题难度怎么样呢,能不能把题目大概说下?
加载更多回复(1)

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧