tttttt@@@@@@ 发表于 2023-6-8 09:56:31

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

设有int a[ ]={10,11,12},*p=&a;则执行完*p++;*p+=1;后a,a,a的值依次是 (   )
    A).10,11,12            B).11,12,12
    C).10,12,12            D).11,11,12

isdkz 发表于 2023-6-8 09:56:32

在C/C++中, p++ 是一个后缀自增运算符,表示将p指向的位置向后移动一个元素的大小。这种情况下,p是一个指针变量, p++ 不会改变p指针所指向的元素的值,而是改变了p指针本身的值,使其指向数组的下一个元素。

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

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

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

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

所以,a, a, a的值依次是10, 12, 12,对应的选择是C).10,12,12。

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

tttttt@@@@@@ 发表于 2023-6-8 10:18:16

就是说对于*p++是先算p++对吗

两手空空儿 发表于 2023-6-8 15:45:56

tttttt@@@@@@ 发表于 2023-6-8 10:18
就是说对于*p++是先算p++对吗

*p++相当于下面两个语句
*p;   //这里做了解引用,但是什么也没干,所以没有产生任何变化
p++;
页: [1]
查看完整版本: 对于*p++为什么是地址变而不是数值即a[0]加一,对于指针和数组,可以直接写*p=a嘛