有以下程序 void fun(int *p1,int *p2,int *s ) { s=( int * )malloc( sizeof(int) ); *s = *p1 + *(p2++); } main() { int a[2]={1,2 }, b[

admin2019-04-24  21

问题 有以下程序
void fun(int *p1,int *p2,int *s )
{
s=( int * )malloc( sizeof(int) );
*s = *p1 + *(p2++); }
main() {
int a[2]={1,2 }, b[2]={10,20}, *s=a;
fun( a,b,s );
printf("%d\n", *s ); }
程序运行后的输出结果是

选项 A、10
B、11
C、2
D、1

答案D

解析 主函数中定义指针s指向数组a,调用fun函数,首先是实参传给形参,因此p1指向a,p2指向b,s指向a,即*s的值为1。流程到调用函数fun执行,首先更改s的指向为新分空间的首地址,表达式*s = *p1 + *(p2++),取p1指向数据位1,加上p2指向数据10,p2后移,存放到s指向的空间中11.流程结束,形参s和p1,p2撤销,存入s指向空间的数据丢失,主函数输出s指向数据仍然是1。
转载请注明原文地址:https://kaotiyun.com/show/MmRp777K
0

最新回复(0)