单选题 以下程序的输出结果是______。
#include <stdio.h>
void sub(int x, int y, int * z)
{ *z=y-x;
}
main()
{ int a, b, c;
sub(10, 5, &a); sub (7, a, &b); sub(a, b, &c);
printf("% d, % d, % d/n", a, b, c);
}
  • A.5,2,3
  • B.-5,-12,-7
  • C.-5,-12,-17
  • D.5,-2,-7
【正确答案】 B
【答案解析】[解析] sub()函数为void类型,因此无函数返回值。函数的形参中,z是一个基类型为int的指针变量,因此它只能从实参接受一个int变量的地址。在sub()函数体中,语句*z=y-x;把形参y与x的差值放入形参z所指的存储单元中。在主函数中,3次调用sub()函数。第一次调用时,把10和5分别传送给形参x和y,把主函数中变量a(int类型)的地址传送给了形参z,所以形参z就指向了主函数中的变量a。在sub()函数中,语句*z=y-x;把-5放入z所指的存储单元中,如上所述,形参z已指向主函数中的变量a,因此,这时主函数中的变量a中就已被赋予-5。接着返回主函数。第二次调用时,把7传送给了形参x,把a中的值(-5)传送给了形参y,主函数中变量b(int类型)的地址传送给了对应形参中的指针变量z,所以形参z就指向了主函数中的变量b。执行sub()函数中的语句*z=y-x;把-12赋给主函数中的变量b,然后返回主函数。第三次调用时,把a中的值(-5)传送给了形参x,把b中的值(-12)传送给了形参y,而形参指针变量z指向了主函数中变量c。sub()函数中,*z=y-x;把-12-(-5)的值放入z所指的变量c中,因此,c中就放入了-7。返回主函数后,输出a、b、c的值,因此输出的结果是-5、-12、-7。