函数之间参数传递的方式有________和________。
答案:值传递,地址传递
简述:函数之间两种参数传递方式的区别。
答案:
值传递:将main函数的值传入函数,是将值复制一个,对其操作,在函数结束后,将会被清空,也不会让原来的值进行改变
地址传递:是想main函数里面的变量的地址传入函数,其在函数里面进行的操作是直接对main函数里面的值操作
函数main 有那些参数?各代表什么含义? 假如程序a调用如下所示:a 123写出程序a中main 函数的参数的具体值
答案:
int argc 和int* argv[],argc是传入参数的数量,argv是一个数组,里面含有指向传入参数的指针,
用指针作函数参数,编程序求一维数组中的最大和最小的元素值
思路:①主函数中定义一维数组int a[]={11,8,89,7,5,4,32,15,21} , max , min;
②定义函数 void arr_max(int *a, int n,int *max); //a接收数组 n表示长度 max接收最大值
③定义函数 void arr_min(int *a, int n,int *min); //a接收数组 n表示长度 min接收最小值
④在主函数中输出最大值和最小值
#include <stdio.h>
//声名最大值函数
void arr_max(int *a, int n, int *max);
//声名最小值函数
void arr_min(int *a, int n, int *min);
int main(){
int a[] = {11,8,89,7,5,4,32,15,21};
int max,min;
//计算数组长度
int n = sizeof(a) / sizeof(int);
//调用最大值函数
arr_max(a,n,&max);
//调用最小值函数
arr_min(a,n,&min);
return 0;
}
void arr_min(int *a, int n, int *min) {
//让最小值指向a的首地址
min = a;
//循环遍历数组,找到最小值
for (int i = 0; i < n; ++i) {
if(*min > *(a + i)){
min = a + i;
}
}
//输出最小值
printf("min = %d",*min);
}
void arr_max(int *a, int n, int *max) {
//让最大值指向a的首地址
max = a;
//循环遍历数组,找到最大值
for (int i = 0; i < n; ++i) {
if(*max < *(a + i)){
max = a + i;
}
}
//输出最大值
printf("max = %d\n",*max);
}
用指针接收函数参数,编程序求二维数组的输入、输出、求最大值
思路:1》主函数中定义二维数组 int a[3][4];
2》自定义函数void arr_input(int (*a)[4] , int H , int L);
3》自定义函数void arr_output(int (*a)[4] , int H , int L);
4》自定义函数void arr_max(int (*a)[4] , int H , int L);
5》主函数调用函数实现
#include <stdio.h>
//声明赋值函数
void arr_input( int H, int L,int (*a)[4]);
//声明输出函数
void arr_output( int H, int L,int(*a)[4]);
//声明输出最大值函数
void arr_max(int H, int L, int(*a)[L]);
int main(){
//声明二位函数
int a[3][4];
//计算数组列
int L = sizeof(a[0]) / sizeof(int);
//计算数组行
int H = (sizeof(a) / sizeof(int)) / L;
//调用赋值函数
arr_input(H,L,a);
//调用输出函数
arr_output(H,L,a);
//调用输出最大值函数
arr_max(H,L,a);
return 0;
}
//赋值函数
void arr_input(int H, int L, int (*a)[4]) {
//循环遍历每个位置,将其赋值
for (int i = 0; i < H; ++i) {
printf("第 %d 行,请输入 %d 个元素\n",i + 1,L);
for (int j = 0; j < L; ++j) {
scanf("%d",*(a+i)+j);
}
}
}
//输出函数
void arr_output(int H, int L, int (*a)[4]) {
//循环遍历数组每个位置,输出每个位置的值
for (int i = 0; i < H; ++i) {
for (int j = 0; j < L; ++j) {
printf("%-5d",*(*(a+i)+j));
}
printf("\n");
}
}
//输出最大值函数
void arr_max(int H, int L, int (*a)[L]) {
//定义最大值容器
int max = **a;
//循环遍历数组每个位置,将其值跟最大值对比
for (int i = 0; i < H; ++i) {
for (int j = 0; j < L; ++j) {
if(*(*(a + i) + j) > max){
max = *(*(a + i) + j);
}
}
}
//输出值
printf("max = %-5d",max);
}