
#include<stdioh>
int main()
{
int a[5];
int i,max,min;
printf("input number:\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
max=a[0];
min=a[0];
for(i=0;i<5;i++){
if(a[i]>max)
max=a[i];
}
for(i=0;i<5;i++){
if(a[i]<min)
min=a[i];
}
for(i=0;i<5;i++){
printf("%d",a[i]);
printf(" ");
}
printf("\n");
printf("最大值为%d\n",max);
printf("最小值为%d\n",min);
return 0;
}
例如:你自己定义一个函数
int
max(int
a,int
b){
}
在这里a,b就是形参,接下来你会调用max函数,如:
void
main()
{
int
c,int
d;
max(c,d);
}
这里c
d就是实参
所谓形参就是在函数定义体中的参数
所谓实参就是在调用函数时实际传进函数的参数
#include <stdioh>
int main()
{
void fun(int arr[]);
int a[10];
int i;
printf("please input 10 numbers:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
fun(a);
}
void fun(int arr[])
{
int j,m=0,n=0,max=arr[0],min=arr[0];
for(j=1;j<10;j++)
{
if(arr[j]>max)
{
max=arr[j];
m=j;
}
if(arr[j]<min)
{
min=arr[j];
n=j;
}
}
printf("The max is a[%d]=%d\n",m,max);
printf("The min is a[%d]=%d\n",n,min);
}
这个问题是这样的了,因为你的数组定义的是二维大小是2020 地址空间已经分配好了,而但你输入的m和n的值小于20的时候,你只是先给第一维赋值,如果输入的数字大于20,在对第二维赋值,但你输入一些小的m和n时,其实二维数组你还没有赋值,他们的值还是你默认给的0啊,而当你用二维数组去读数的时候 a[0][j]的值就是从a[0]开始,所以结果是对的
但是a[1][j]的地址却是&a[0][0]+420,可以看出你并没对那里赋值。
你可以把数组改小一点,如33啊,44啊什么的然后输入看结果就是对的了
你可以用我的这个程序去看看运行后的结果,你就会明白了:
#include<stringh>
main()
{
void enter(int ar[],int n,int m);
int a[20][20]={0},n,m,i,j;
printf("enter the N and M:");
scanf("%d%d",&n,&m);
enter(a[0],n,m);
printf("\n");
for(i=0;i<n;i++)
{for(j=0;j<m;j++)
printf("%3d-%d ",a[i][j],&a[i][j]); //打印每个数组元素的地址
printf("\n");
}
system("pause");
}
void enter(int ar[],int n,int m)
{
int i,j;
for(i=0;i<nm;i++)
scanf("%d",&ar[i]);
for(i=0;i<nm;i++)
printf("%d ",&ar[i]);//打印地址
printf("\n");
}
C编译对
形参
数组
大小
不做检查,只是将实
参数
组的首地址传给形参数组,因此,
实参
不论多大都不会出现形参溢出。在
定义
形参时可以不指定大小,而只在
后面
加方
括弧
。
答案补充
简单的说就是就是不会溢出,,不论你的实参多么大,,形参也有足够大的容量
以上就是关于C语言查找数组中的最小数全部的内容,包括:C语言查找数组中的最小数、c语言中 数组实参和形参的设置。、用c语言,键盘输入一维数组a[10]的每一个元素,使用子函数(要求实参使用数组名)编程实现,求最大和最小值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)