A.
first=last=k;
B.
此时first=last,在调用inplace_swap(&a[first],&a[last]);时,传递给形参x,y的是同一个地址值,即x=y=&a[first]=&a[last],指针x和y都是指向同一个地址的
接着就执行void inplace_swap(int *x,int *y)
void inplace_swap(int *x,int *y)
{
*y=*x^*y; //*y=0,因为指针x和y都是指向同一个地址的,所以*x=0;
*x=*x^*y; //*x=0^0=0;
*y=*x^*y; //*y=0^0=0;
}
所以当调用void inplace_swap(int *x,int *y)函数时,会将数组元素设置为0;
C.
将void reserve_array(int a[ ],int cnt)函数中第四行for中的判断语句由原来的first<=last,改为first<last就能够消除将数组设置为0的问题。