‘请选出以下程序的输出结果 A) 1 2 3 4 B) 4 3 2 1 C) 0 0 0 0 D) 4 4 4 4

'请选出以下程序的输出结果 A) 1 2 3 4 B) 4 3 2 1 C) 0 0 0 0 D) 4 4 4 4
main()
{ int a[ ]={ 1,2,3,4 },i;
int x=0;
for(i=0; i<4; i++)
{ sub(a,x); printf("%d",x);}
printf("\n");
}
sub(int *s,int y)
{ static int t=3;
y=s[t]; t–;
}

解析:
首先看下面这个函数:
for(i=0; i<4; i++)
{ sub(a,x); printf("%d",x);}
printf("\n");
}
请弄清楚这里的for 函数一共执行了四次。每一次都会执行一次sub(a,x)函数,所以接下来我们需要关注的是sub(a,x)函数。程序进入sub(a,x)函数后,注意函数参数中这里用到了指针,指针的特点是链上参数地址了,所以sub函数的第一参数会随着for函数的变化跟着变化,而sub的第二个参数是从for函数中传递过来的,不具备指针功能,于是在没有return函数的前提下,是不能回传的。
所以for函数中的对参数x的打印始终保持着原来x的值,因此程序打印出来的结果:0 0 0 0
 
题中知识点归纳:
1、c语言指针使用的过程中,除非改变指针的指向或直接改变指针所指向的内容,否则指针指向内容是不会变化的。
2、c语言中,如果需要回传参数,请使用return()函数。
3、c语言中,static 关键字可以是的参数不会因为第二次进入而回归0值。
 
c语言程序设计 参考书籍/文献:
1、《c primer plus》
2、《数据结构(c语言版)例题详解与课程设计指导》第二版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值