首页 > 试题广场 >

下面一段c代码正确输出的是( )

[单选题]
下面一段c代码正确输出的是()
#include <stdio.h>
int main() {
    int *p = NULL;
    int a[] = {1, 2, 3, 4};
    p = a;
    *(p++) += 100;
    printf("%d %d %d %d %d\n", *p, a[0], a[1], a[2], a[3]);
    return 0;
}
  • 1 101 2 3 4
  • 2 101 2 3 4
  • 1 102 2 3 4
  • 2 102 2 3 4
p指向(等价)a[0],
*(p++) + = 100;
等价*p + = 100,p++;即a[0]+=100,pl指向a[1];
*p = 2,a[0]=101...
发表于 2017-08-15 12:49:48 回复(4)
p++是运行完代码在向p添加1,而++p是先加再执行代码
发表于 2017-08-28 13:53:36 回复(1)
这是一道常考类型题,重点考察*(p++) + = 100; 错误想法是*(p++)  = *(p++) + 100; 正确的步骤是先计算*p.  p = a,*p代表1,计算*p = *p + 100;此时*p = 101,即a的第一个元素被替换成101,然后再计算p++,即指针p向后移动一位,指向a的第二个元素,*p代表2。还要注意printf的参数计算顺序,不过这道题这里没什么陷阱。
大家可以算一下下面这道题,掌握一下这类题
int arr[] = {6,7,8,9,10};
int *ptr = arr;
*(ptr++) += 123;
printf("%d, &d",*ptr,*(++ptr));
答案:8,8
发表于 2020-05-16 12:34:07 回复(6)
*(p++) + = 100;
等价*p + = 100,p++;即a[0]+=100,pl指向a[1];
发表于 2018-08-28 17:06:23 回复(0)
p++这个表达式返回的是p的一个副本,因此*(p++)+=100 实际上可以拆分成:(*p)+=100; p=p+1;
发表于 2019-04-21 18:07:44 回复(0)
p++与++p的区别没注意
发表于 2018-04-26 08:10:43 回复(0)
“ *(p++) += 100” 中首先,给*p的值加上100,此时a[0]=101,,之后p++,此时p指向a[1],则*p=2,而a[2]和a[3]不变
发表于 2021-12-23 14:34:54 回复(0)
p指向(等价)a[0],
*(p++) + = 100;
等价*p + = 100,p++;即a[0]+=100,pl指向a[1];
*p = 2,a[0]=101...
发表于 2021-12-02 08:53:06 回复(0)
好吧,题目看错了
发表于 2018-07-04 21:03:29 回复(1)
败在括号上了。以为有括号,就跟前后置无管
发表于 2024-09-04 00:49:03 回复(0)
就是易错点,别忘了把指针向下移一位
发表于 2023-08-21 11:15:34 回复(0)
p++和++p的区别
发表于 2023-07-20 21:02:02 回复(0)
晕 p++是后执行,我怎么说没答案
发表于 2023-06-01 08:51:57 回复(0)
p++是先运算后加减,所以等价于*p += 100; p++;
发表于 2022-10-11 11:24:07 回复(0)
p++的意思是先用p当前的值运算,最后p再加1,这*p指向a0,则*(p++)指向a1,,++p是先对p加1,然后再进行运算
发表于 2022-07-17 15:57:22 回复(0)
如果改为++p,那么输出结果是102 1 102 3 4
发表于 2021-12-02 14:50:44 回复(0)
首先要知道
*(p++) + = 100;
这个运算是顺序是:
*p+=100;   //也就是*p = *p + 100,而p是指向a[0]的指针,所以*p=1,加完100之后变成了101
<di>

所以最后是   2   101  2  3  4
</di>
发表于 2021-11-18 10:36:51 回复(0)

考点:优先级+指针步长
传送门

p=a;//相当于强制转换 p=(int *) a;
*(p++) + = 100;等价于
先操作p++;但是不立马生效
*p+=100;//等价于a[0]+=100;
下面一行才是
p=p+1;//也就是p=&a[1]
发表于 2020-09-28 21:32:38 回复(0)

被括号的优先级干扰了判断,p++与++p的考点在本题中没有想到

发表于 2019-07-11 22:29:54 回复(0)
*(p++) += 100;
等价于: *p += 100; p++;
发表于 2019-03-20 14:40:11 回复(0)