2 dabentudou dabentudou 于 2016.01.15 23:48 提问

以下程序的运行结果是:以下程序的运行结果是:

以下程序的运行结果是: #include
void sub(int s[],int y)
{ static int t=3; y=s[t];t--; } main() { int a[]={1,2,3,4},i,x=0; for(i=0;i<4;i++){ sub(a,x);printf("%d",x);} printf("\n"); }
A)1234 B)4321 C)0000 D)4444

6个回答

caozhy
caozhy   Ds   Rxr 2016.01.15 23:51
已采纳
qq_27183003
qq_27183003   Ds   Rxr 2016.01.16 22:24

选C main函数里的x没有改变,一直是0.

u012374972
u012374972   2016.01.16 00:34

#include
#include

void sun(int s[], int y);

void sub(int s[],int y)
{
static int t = 3;
y = s[t];
t--;
}
void main()
{
int a[] = { 1, 2, 3, 4 }, i, x = 0;
for (i = 0; i < 4; i++)
{
sub(a, x);
printf("%d",x);
}
printf("\n");
_getch();
}
运行结果图片说明

u012374972
u012374972 回复qq_29389535: 函数参数在函数间传递数据,需要搞清楚 函数调用的值传递 和 地址传送方式传递数据
接近 2 年之前 回复
u012374972
u012374972 回复qq_29389535: 这个sub函数,是函数调用的值传递,在被调用的函数体内,形参的改变只影响副本的形参值,而不影响调用函数中的实参值。
接近 2 年之前 回复
qq_29389535
qq_29389535 为什么得0000呢?
接近 2 年之前 回复
qq_29389535
qq_29389535   2016.01.16 00:43

本人觉得是D,虽然t是静态的,到循环时从新执行t=3.也就是说虽然保留上回结果,但是从新执行又变为3

91program
91program   Ds   Rxr 2016.01.16 11:01

此问题的关系知识点是 static 的应用吧,在函数中 static 变量只初始化一次、以后每次减一(而不再初始化为 3)。

91program
91program 还有实参数与变参的问题,个人认为答案应该是 C:0000。因为在函数中怎么改变 y 的值,都不会响应参数 x.x 的值一直是零 。
接近 2 年之前 回复
CSDNXIAON
CSDNXIAON   2016.01.15 23:50

数据库中运行程序前和运行程序后结果是一样的原因
下列程序的运行结果是
面试题:以下程序的输出结果是
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!