在C语言中,已知定义:int b[]={1,2,3,4},y,*p=b;执行y=*p++后,y的值为( )。求过程

2025-03-09 21:29:11
推荐回答(3个)
回答1:

1楼的回答是错误的,执行*p++后并不会修改数组b中的任何值,运行y = *p++,++的优先级要高于*,所以等价于y = *(p++),由于初始化时p指向b[0],由于++后置,所以p++在执行*操作时仍然是指向b[0],执行完成后才增加,指向b[1]。因此,*p++ = b[0] = 1。
执行完成后,*p = b[1] = 2,这里只修改p的值,只是取出数组b中的值,并不会修改数组b中的任何值。

回答2:

*p++等效于*(p++),是 先引用后自增,p原先指向b[0],所以y的值为b[0],y=1;p后加1,p指向b[1]
另外b[0]值还是1没变

回答3:

执行这句y=*p++;时,p指向数组b的首地址,也就是b[0],由于++是后置,所以y=自增之前的b[0],y的值为1,执行之后b[0]为2;