题目1:函数之间参数传递的方式有________和________。(富士安全)
答案:值传递 地址传递
题目2: 简述:函数之间两种参数传递方式的区别。
答案:值传递:形参与实参分处不同的储存单元,形参变,实参不变
地址传递:形参和实参在相同的储存单元里面,形参变,实参也变
题目3: 函数main 有那些参数?各代表什么含义? 假如程序a调用如下所示:a 123写出程序a中main 函数的参数的具体值。 (拓仓科技)
答案:argc代表命令行参数的个数
argv是一个指向字符指针数组的指针
argv是‘a'
argc是’2‘
题目4: 用指针作函数参数,编程序求一维数组中的最大和最小的元素值
思路:①主函数中定义一维数组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 <string.h> #include <stdlib.h> void arr_max(int *a,int n,int *max); void arr_min(int *a,int n,int *min); int main(int argc, const char *argv[]) { int a[]={11,8,89,7,5,4,32,15,21}; int n=sizeof(a)/sizeof(int); int max=a[0],min=a[0]; void arr_max(int *a,int n,int *max); void arr_min(int *a,int n,int *min); for(int i=0;i<n;i++){ if(a[i]>max){ max=a[i]; } if(a[i]<min){ min=a[i]; } } printf("最大值%d\n 最小值%d\n",max,min); return 0; }
题目5: 用指针接收函数参数,编程序求二维数组的输入、输出、求最大值
思路: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> #include <string.h> #include <stdlib.h> void arr_input(int (*a)[4], int H, int L); void arr_output(int (*a)[4], int H, int L); void arr_max(int (*a)[4], int H, int L); int main(int argc, const char *argv[]) { int a[3][4]; arr_input(a, 3, 4); arr_output(a, 3, 4); arr_max(a, 3, 4); return 0; } void arr_input(int (*a)[4], int H, int L) { for (int i = 0; i < H; i++) { for (int j = 0; j < L; j++) { scanf("%d", *(a + i) + j); } } } void arr_output(int (*a)[4], int H, int L) { 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 (*a)[4], int H, int L) { int max = *(*(a)); for (int i = 0; i < H; i++) { for (int j = 0; j < L; j++) { if (max < *(*(a + i) + j)) { max = *(*(a + i) + j); } } } printf("最大值为 %d\n", max); }