A-A+

有以下程序 yoidfun(int*pl int*p2 int*S) { s=(int*)m

2022-08-12 18:50:31 问答库 阅读 197 次

问题详情

有以下程序 yoidfun(int*pl,int*p2,int*S) { s=(int*)malloc(sizeof(int)); *S=*pl+*(p2++);) main(){ inta[2]={1,2},b[2]={10,20},*s=a; fun(a,b,S); printf(%dha,*S);} 程序运行后的输出结果是
A.10
B.11
C.2
D.1

请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:D
主函数中定义指针s指向数组a,调用fun函数,首先是实参传给形参,因此p1指向a,p2指向b,s指向a,即*s的值为1。流程到调用函数fun执行,首先更改s的指向为新分空间的首地址,表达式*s=*pl+*(p2++),取p1指向数据位1,加上p2指向数据10,p2后移,存放到s指向的空间中11.流程结束,形参s和pl,p2撤销,存入s指向空间的数据丢失,主函数输出s指向数据仍然是1。

考点:程序