乐淘资源 干货福利 C笔试O_o我都不记得有这个图片

C笔试O_o我都不记得有这个图片

广告位

今天在后台看到一个同学这样回复

里面有一个「具体解析在 嵌入式Linux 微信公众号」

原谅我 ,因为写的文章比较多了,我有时候都记不住自己写过哪些文章,所以我有时候为了找到自己的文章,也会使用到微信公众号的搜索功能,那个搜索的功能还是挺不错的,大家找问题也可以用这个方法。

图片有点不清晰,我把代码重新写一遍

int *p = &arg[1]

这行代码给这个题目定了一个基调,也就是这个基调让之后的所有操作都有据可依。

arg[1] 是int 的类型,&arg[1]的类型就是 int *  ,所以它和int * p 的类型是匹配的。

*(p++) += 5

类似的题目可以看下面这篇文章

​​C 语言中,x += 5 == 4 是什么意思?​​

所以,*(p++) += 5 ,的操作就是,先把p指向的地址加上5,然后再执行p++跳转到下一个位置上去。

p 原来指向的位置是 arg[1],下一个位置自然就是arg[2]了。

那 v = *p 的值就很明显了,等于 arg[2]

*p = *p +5,也就是 arg[2] += 5,也就是arg[2] = 7。

至于题目里面说的arg[3],这个内存地址的值我认为不一定等于3的,p指针的操作也一直没有覆盖到这个地址,所以图片上的arg[3]的答案我认为不是正确的。

如果把题目修改成这样呢?

或者

考察点并不多,不过我相信依然有很多人写不出来的。

如果修改成这样

如果修改成这样的话,编译就会提示出问题,因为p的类型和arg的类型是不匹配的。

*p+++=5 ,操作会让arg[0] = 5,之后 p++ ,就直接跳到了数组的下一个元素。

这样之后,其他变量的大小应该没有问题了吧。

那如果是这样呢?

p 初始化的时候,就直接跳过了整个数组

*–p+=5 ,是让p退回来一个 int大小,然后再对指针操作,也就是arg[2] = 7。

之后,执行了一个 *p = *p +5,也就是arg[2] += 5。

具体答案就不说了

本文来自网络,不代表乐淘资源立场,转载请注明出处,如有侵权问题需要处理,请联系站长删除。联系QQ 917118162

作者: admin

上一篇
下一篇
广告位
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 917118162@qq.com

工作时间:周一至周五,9:00-17:30
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部