指针两题 急 谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/01 06:49:48
1 有以下程序
void fun(char *a, char *b)
{ a=b; (*a)++; }
main ()
{ char c1='A', c2=a", *p1, *p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf(“&c&c\n”,c1,c2);
}
程序运行后的输出结果是
Ab B) aa C) Aa D) Bb
通过第二行a=b可知p1,p2指向的变量的值相同,那他们共同指向的是哪个变量呢,接下来该怎么做呢 请详解

2 有下列程序
Int a=2;
Int f (int *a);
{ return (*a)++;}
main()
{ int s=0;
{ int a=5;
s+=f(&a);
}
s+=f(&a);
printf("%d\n",s);
}
执行输出的结果是 A 10 B 9 C 7 D 8
不明白

真是郁闷啊,辛辛苦苦敲的答案竟然没提交成功,又得重敲一遍。

这些问题看看书就明白了,我有空给你讲讲。
(1)此问题重点在形参和实参的值传递问题,当执行fun(p1,p2); 时,此时形参a=p1,形参b=p2,在函数fun中,只操作形参a,b,不操作实参p1,p2,所以p1,p2的值不会变,仍然是c1,c2的地址。p1,p2指向的变量的值不同。在函数fun中a=b,即a=b=p2,(*a)即为变量c2,所以(*a)++即为c2++,所以执行完(*a)++后c2='b',而c1并没有被操作,c1还是为'A'.答案为 Ab

注意形参的改变不会影响到实参 即a=b,并不会使p1=p2。

(2)Int a=2;全局变量a
Int f (int *a); 形参a
int a=5;局部变量a
此问题在于全局变量和局部变量的作用域,在一个代码块中,如两大括号中,局部变量会掩盖全局变量的。当执行到{ int a=5; s+=f(&a); }时,函数f使用的是局部变量a的值,即把局部变量a的地址传递给形参a。然后到到函数f中。在函数f中需注意后缀++的使用,后缀++是先返回值,再自加一的,所以函数f先返回(*a),再执行(*a)++。所以当执行到{ int a=5; s+=f(&a)后,s=5,而局部变量a=6。但当执行; }后,即运行出大括号后,局部变量a就被销毁掉了,局部变量a的作用域自只在大括号中。又执行s+=f(&a); 时,此时a为全局变量a,此时s=5,所以s+=f(&a)即为s=s+f(&a)即为s=5+f(&a)即为s=5+2,最终s=7,而全局变量a=3。答案为 7。

此问题的注意前缀自增和后缀自增的不同

怎么样,懂了吗?

1.Ab
p1,p2指向的变量的值相同,那他们共同指向的是哪个变量呢.char *b.

2.7

第一次调用s+=f(&a),a用的是{ int a=5;
s+=f(&a); } 因为花括号的原因,a=5作用域仅限在花括号里。s=5。

第二次调用s+=f(&a),是