面試題目,大家進來瞧瞧,關于指針的

kabing 2010-03-23 11:48:57
int a[10];
int *p;
p=a;
a=p;

(char *)p=(char *)a;
++p;
(char **)p=(char **)a;
++p;

前四句是否有錯,后四句p得到的結果是什么?請高手指教下。
...全文
112 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sheneven 2010-03-25
  • 打赏
  • 举报
回复
char *)p=(char *)a;
(char **)p=(char **)a;

怀疑等式左侧的强转是否能用?
还有,强转成二维指针。。。
即使程序不报错,谁知道能跳到什么地方?
我只见过(char**)&a这种东西
farawayspring 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 shineshineredstar 的回复:]
是这样的,
另外对指针类型强制转换后返回的是右值,也不能赋值。
如果是p是char*, ++p使p的原值加1,如果p是char**,++p使p的原值加4.
[/Quote]

为什么当p是char**时,++p会使p的原值加4呢?
ShineShineRedStar 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 demon__hunter 的回复:]

1 数组名是右值
2 指针在进行算术运算时,每增加offset时 指针要下移 offset*指针所指的类型 大小的字节。
[/Quote]
是这样的,
另外对指针类型强制转换后返回的是右值,也不能赋值。
如果是p是char*, ++p使p的原值加1,如果p是char**,++p使p的原值加4.
SiGoYi 2010-03-23
  • 打赏
  • 举报
回复
a=p;
(char *)p=(char *)a;
(char **)p=(char **)a;
在我这以上三句都编译不过,“a=p”太明显。
mbctb 2010-03-23
  • 打赏
  • 举报
回复
当然,那个“a=p”是个太明显的错误。难度和下面不是一个等级的。
mbctb 2010-03-23
  • 打赏
  • 举报
回复
我也认为这两个强制转换语句跟没转一样。不能改变p的指针类型,也不能改变它的值。这样,执行一个p++以后,p指向a[1],再执行一个p++以后,p指向a[2].
bitxinhai 2010-03-23
  • 打赏
  • 举报
回复
int a[10];
int *p;
p=a;
a=p;//数组名是常量指针,不允许更改值
cy330206 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 demon__hunter 的回复:]
1 数组名是右值
2 指针在进行算术运算时,每增加offset时 指针要下移 offset*指针所指的类型 大小的字节。
[/Quote]

楼主这个靠谱,,呵呵up
机智的呆呆 2010-03-23
  • 打赏
  • 举报
回复
1 数组名是右值
2 指针在进行算术运算时,每增加offset时 指针要下移 offset*指针所指的类型 大小的字节。
hai040 2010-03-23
  • 打赏
  • 举报
回复
这个强制转换跟没转一样
xiejijun_05 2010-03-23
  • 打赏
  • 举报
回复
很明显a=p有错。
wade_2003 2010-03-23
  • 打赏
  • 举报
回复
(char *)p=(char *)a;
(char **)p=(char **)a;
后面这两句也编译不过啊
ShineShineRedStar 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 farawayspring 的回复:]

引用 9 楼 shineshineredstar 的回复:
是这样的,
另外对指针类型强制转换后返回的是右值,也不能赋值。
如果是p是char*, ++p使p的原值加1,如果p是char**,++p使p的原值加4.


为什么当p是char**时,++p会使p的原值加4呢?
[/Quote]因为指针本身占4个字节。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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