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

以下程序的运行结果是: #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

C
参考:http://codepad.org/keBnMDZI

#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();
}
运行结果图片说明

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

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

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