|
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
在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指向的元素值增 ...
|