鱼C论坛

 找回密码
 立即注册
查看: 1157|回复: 3

[已解决]对于*p++为什么是地址变而不是数值即a[0]加一,对于指针和数组,可以直接写*p=a嘛

[复制链接]
发表于 2023-6-8 09:56:31 | 显示全部楼层 |阅读模式
1鱼币
设有int a[ ]={10,11,12},*p=&a[0];则执行完*p++;*p+=1;后a[0],a[1],a[2]的值依次是 (   )
    A).10,11,12              B).11,12,12
    C).10,12,12              D).11,11,12
最佳答案
2023-6-8 09:56:32
在C/C++中, p++ 是一个后缀自增运算符,表示将p指向的位置向后移动一个元素的大小。这种情况下,p是一个指针变量, p++ 不会改变p指针所指向的元素的值,而是改变了p指针本身的值,使其指向数组的下一个元素。

对于你的问题,我们先设int a[] = {10, 11, 12}, *p = &a[0];现在p指向a[0]。

执行*p++后,p向后移动,现在指向a[1]。

接下来,执行*p+=1,这是一个加法赋值运算符,等同于*p = *p + 1,它将把p指向的元素值增加1。

所以,执行完*p++;*p+=1;后,a[0]的值没有改变,仍然是10,a[1]的值变成了12,a[2]的值仍然是12。

所以,a[0], a[1], a[2]的值依次是10, 12, 12,对应的选择是C).10,12,12。

对于你问的 *p=a ,这在C/C++中是不被允许的,因为 *p 和 a 类型不匹配。 *p 是一个整数类型,而 a 是一个整型数组类型,不能直接赋值。如果你想让指针p指向数组a的首元素,应该写 p=a ,这样p就指向了a[0]。

最佳答案

查看完整内容

在C/C++中, p++ 是一个后缀自增运算符,表示将p指向的位置向后移动一个元素的大小。这种情况下,p是一个指针变量, p++ 不会改变p指针所指向的元素的值,而是改变了p指针本身的值,使其指向数组的下一个元素。 对于你的问题,我们先设int a[] = {10, 11, 12}, *p = &a[0];现在p指向a[0]。 执行*p++后,p向后移动,现在指向a[1]。 接下来,执行*p+=1,这是一个加法赋值运算符,等同于*p = *p + 1,它将把p指向的元素值增 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-8 09:56:32 | 显示全部楼层    本楼为最佳答案   
在C/C++中, p++ 是一个后缀自增运算符,表示将p指向的位置向后移动一个元素的大小。这种情况下,p是一个指针变量, p++ 不会改变p指针所指向的元素的值,而是改变了p指针本身的值,使其指向数组的下一个元素。

对于你的问题,我们先设int a[] = {10, 11, 12}, *p = &a[0];现在p指向a[0]。

执行*p++后,p向后移动,现在指向a[1]。

接下来,执行*p+=1,这是一个加法赋值运算符,等同于*p = *p + 1,它将把p指向的元素值增加1。

所以,执行完*p++;*p+=1;后,a[0]的值没有改变,仍然是10,a[1]的值变成了12,a[2]的值仍然是12。

所以,a[0], a[1], a[2]的值依次是10, 12, 12,对应的选择是C).10,12,12。

对于你问的 *p=a ,这在C/C++中是不被允许的,因为 *p 和 a 类型不匹配。 *p 是一个整数类型,而 a 是一个整型数组类型,不能直接赋值。如果你想让指针p指向数组a的首元素,应该写 p=a ,这样p就指向了a[0]。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-6-8 10:18:16 | 显示全部楼层
就是说对于*p++是先算p++对吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-8 15:45:56 | 显示全部楼层
tttttt@@@@@@ 发表于 2023-6-8 10:18
就是说对于*p++是先算p++对吗

*p++相当于下面两个语句
*p;     //这里做了解引用,但是什么也没干,所以没有产生任何变化
p++;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 01:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表