int x=10;*p;p=&x; 选项值为11的是 A.++*&p B.++&p C.*&*p++ D.++*&*p 我想问问,为什么A.++*&p不正确?

 我来答
暗影诸葛
2023-03-19 · TA获得超过148个赞
知道小有建树答主
回答量:187
采纳率:60%
帮助的人:38.2万
展开全部

这是一个关于C语言指针的问题。在回答你的问题之前,我先解释一下每个选项的含义:

  • A.++*&p 表示先取p指向的变量的值,然后对其加1,再赋值给p指向的变量。相当于x=x+1。

  • B.++&p 表示先取p的地址,然后对其加1,再赋值给p。这是一个非法操作,因为不能修改常量地址。

  • C.*&*p++ 表示先对p加1,然后取其指向的变量的值。这也是一个非法操作,因为p已经超出了x的范围。

  • D.++*&p 表示先取p指向的变量的地址,然后对其加1,再取其指向的变量的值。相当于(x+1)。

  • 所以,只有D选项可以得到11。

    那么为什么A选项不正确呢?因为A选项虽然可以改变x的值,但是它返回的是改变后x的值,而不是改变后x所在地址上的值。也就是说,在执行完A选项后,x=11,但是*p=10。所以A选项返回10而不是11。

帐号已注销
2023-03-19 · TA获得超过110个赞
知道大有可为答主
回答量:4467
采纳率:100%
帮助的人:75.4万
展开全部
我们来分析一下选项 A.++*&p 的操作过程:
1. &p:取 p 的地址,得到一个指向指针变量 p 的指针。
2. *:对指针变量 p 的指针进行解引用,得到指针变量 p 的值,即 x 的地址。
3. &:对 x 的地址取地址,得到一个指向 x 的指针的指针。
4. ++:对指向 x 的指针的指针进行自增操作,即将指向 x 的指针的指针的值加 1。
但是,对一个指针的指针进行自增操作是没有意义的,因为指针的指针并不代表一个可操作的地址。因此,选项 A 是错误的。
正确的操作顺序应该是这样的:
1. *p:对指针变量 p 进行解引用,得到 x 的值。
2. &:对 x 的值取地址,得到 x 的地址。
3. ++:对 x 的地址进行自增操作,即将 x 的地址加 1。
4. *:对自增后的 x 的地址进行解引用,得到 x+1 的值。
因此,正确的选项应该是 D.++*&*p。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式