有以下程序 #include void f(int *p,int *q); main() { int m=1,n=2,*r=&m; f(r, &n); printf("%d,%d",m,n); } void f(int *p,int *q) {

admin2015-07-28  34

问题 有以下程序
#include
void f(int *p,int *q);
main()
{
int m=1,n=2,*r=&m;
f(r, &n);
printf("%d,%d",m,n);
}
void f(int *p,int *q)
{
p=p+1;
*q=*q+1;
}
程序运行后的输出结果是( )。

选项 A、1,3
B、2,3
C、1,4
D、1,2

答案A

解析 函数的参数传递过程中,参数的传递是单向的,形参只是实参的一个副本,形参改变不能影响到实参。如果形参和实参为两个地址,形参指针指向变量的变化能够影响到实参指针指向变量的变化,这是因为形参指针和实参指针指向了同一个地址空间。但是形参指针指向的变化不能影响到实参指针的指向。所以该函数f()调用中,第一个参数只是改变了形参p的指向,第二个参数改变了指针变量q指向的变量的值,所以函数调用结束后,m值不变,n值自增1,答案选A。
转载请注明原文地址:https://kaotiyun.com/show/PdJp777K
0

最新回复(0)