C语言程序要求有分析不要只有答案.谢谢大家

来源:百度知道 编辑:UC知道 时间:2024/05/29 04:01:02
以下程序的运行结果是
#define MAX 10
int a[MAX],i;
main()
{printf(“\n”);sub1();sub3(a);sub2();sub3(a);
}
sub2()
{ int a[MAX], i ,max;
max=5;
for(i=0;i<max;i++) a[i]=i;
}
sub1()
{for(i=0;i<MAX;i++) a[i]=i+i;
}
sub3(int a[ ])
{int i;
for(i=0;i<MAX;i++)printf(“%d”,a[i]);
printf(“\n”);
}
有两个答案不知道是哪个,希望大家能给个分析个人分析:sub3(a)是实参就是把a 给形参sub3(int a[ ])
就是int a[ ]=a 可这又怎么样呢 有什么作用?后面跟这个又没关系 。。又没return语句,这题目怎么这样,百思不得其解
个人糊里糊涂的分析得到A 可答案是B
求大家给个完整权威的分析 谢谢

不要只给出一个答案哦
A 0 2 4 6 8 10 12 14 16 18
0 1 2 3 4

B 0 2 4 6 8 10 12 14 16 18
0 2 4 6 8 10 12 14 16 18

sub1()执行:
for(i=0;i<MAX;i++) a[i]=i+i;
所以数组a的各成员值为:
a[0]:0+0=0
a[1]:1+1=2
a[2]:2+2=4
...
a[9]:9+9=18

sub3(a)
将全局数组首地址a传递给int a[],其实这里的a就是一个指针,指向了数组a的首地址,
随后在sub3中通过指针进行数字遍历,输出各成员值:
0 2 4 6 8 10 12 14 16 18

sub2();
这里请注意,这个函数里面操作的是其内部的临时变量a[MAX]的值,对于全局量a[MAX]没有任何影响

sub3(a)
将全局数组首地址a传递给int a[],其实这里的a就是一个指针,指向了数组a的首地址,
随后在sub3中通过指针进行数字遍历,输出各成员值:
0 2 4 6 8 10 12 14 16 18

所以结果为B

我觉得两个答案都不是啊~我觉得应该是~
0 2 4 6 8 10 12 14 16 18
0 1 2 3 4 10 12 14 16 18
~我来给你说一下我的想法~~首先~我说下~~这个程序有点小问题~~main函数~前边应该有sub1 sub2 sub3~3个函数的声明~否则~主函数里是无法调用的~~要么就把main函数~放到最后~~~~这是~这个程序的一点小问题~~~~然后我带着你把main函数走一边~~前边的max 和数列a的定义~~你该明白~我不说了~~main函数“/n”换行~~运行sub1~运行完sub1~~数列a已经给全部赋值了~~现在a[MAX]={0,2,4,6,8,10,12,14,16,18}~然后该运行sub3(a)~是输出数列a~就是~0 2 4 6 8 10 12 14 16 18~~然后运行sub2~sub2是对数列a前5个元素进行赋值~分别为~0 1 2 3 4~其他元素不变~~然后再运行sub3(a)输出修改后的数列a~~
所以我认为答案应该是
0 2 4 6 8 10 12 14 16 18