C语言理解

来源:百度知道 编辑:UC知道 时间:2024/07/07 10:21:12
#include<stdio.h>
void main()
{
int score[10];
int i;
int temp;
printf("please input 10 scores:\n");
for(i=0;i<10;i++)
scanf("%d",&score[i]);
temp=displayStudentInfor(score);
}

int max(int x,int y)
{
int z;
z=x>y?x:y;
return(z);
}

int sum(int n)
{
static int s=0;
s=s+n;
return(s);
}

int displayStudentInfor(int sco[10])
{
int j=0;
int maxScore=sco[0];
int sumScore;
for(j=0;j<10;j++)
{
maxScore=max(maxScore,sco[j]);
sumScore=sum(sco[j]);
printf("The No.%d Grade is:%d\n",j+1,sco[j]);
}
printf("The max is:%d\n",maxScore);
printf("The sum is:%d\n",sumScore);
}

1.说明程序中所有变量的作用域及生存期
2.说明你对在模块间传

1.先看main函数里面的:int score[10]; int i;int temp;这几个都是在main函数里面有效的,但是再main函数中嵌套的函数里面是不能够使用的。

在 displayStudentInfor里面定义的变量有int j=0;int maxScore=sco[0];
int sumScore; 都是只在displayStudentInfor里面有效的,当退出displayStudentInfor的时候,这些变量都被销毁。

在max里面定义的int z;这个和上面的是一致的,均是在一个函数体里面有效的

唯一要注意的就是在sum中定义的static int s=0;这个变量在s退出的时候不销毁,还保持着原有的值,在下次继续执行,才能完成sum的功能。

2.在模块中的传递可以用一个规则来概括,那就是值传递,当你的形参是值的时候,那么把实参的值赋值到形参中,然后进入函数体执行,但是你这个时候对形参的操作不能改变实参的值,因为你仅仅是对它的值的拷贝在操作,但是当你的形参是指针的时候,那么就要把实参的地址赋值到形参指针中,那么这个时候你的操作就可以改变实参的值了,因为你是对它通过指针进行间接操作,在c++里面还有一种就是引用传递,这里不再赘述,函数的返回值视你的用处决定,当你觉得要让它返回一个值可以让它的功能更加明白完善的时候就可以返回一个值,当你觉得没有必要的时候你可以让它返回空,就是前面加上一个void,比如一个求和的函数,你可以在main函数里面调用它,让它求和完毕之后再赋值给一个你定义的变量,那么这个时候就需要返回值了,你也可以让它在求和的函数体里面直接打印出结果,那么就可以不要返回值了,返回值的用处也不只这个,还有好多,比如设个什么标志啊,作为判断的值了,要不要的标准就要看你的使用情况而定了。

静态的作用域只有在本函数内有效,但是生命周期是全局的,一直有效,
普通的变量作用域也只是在本函数内,生命周期也是本函数内。

传值只是给调用函数复制另一份儿,不改变被引用的元素的值,但是传地址是可以改变被引用的元素的值的

现在才能运行哦
#include<stdio.h> <