1.函数之间参数传递的方式有________和________。(富士安全)
答案:值传递和地址传递
2.简述:函数之间两种参数传递方式的区别。
值传递本质上是将自身的值拷贝给函数的参数,相当于一个副本,对这个副本进行修改不会改变原来的值
地址传递是将值的地址传递过去函数的参数通过这个地址可以改变地址中的值,所以对这个地址的值进行修改会连带着函数外的值一起修改
3.函数main 有那些参数?各代表什么含义? 假如程序a调用如下所示:a 123写出程序a中main 函数的参数的具体值。 (拓仓科技)
答:main函数分别有两个参数,分别是int argc,const char *argv[],其中argv是一个字符串指针数组,argc是字符串指针数组的元素个数;用于接受执行可执行文件时传的参数
具体的值为 a、123
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接收最小值
④在主函数中输出最大值和最小值
1 #include<stdio.h>
2 #include<stdlib.h>
3
4 void arr_max(int *arr,int n,int *max);
5
6 void arr_min(int *arr,int n,int *min);
7
8
9 int main(int argc,const char *argv[]){
10
11 int a[] = {1,8,11,89,12,90,44,65,23,900,4,78,3};
12 int len = sizeof(a)/sizeof(a[0]);
13 int max=a[0];
14 int min=a[0];
15 arr_max(a,len,&max);
16 arr_min(a,len,&min);
17 printf("最大值为:%d,最小值为:%d\n",max,min);
18
19
20 return 0;
21 }
22
23
24 void arr_max(int *arr,int n,int *max){
25 for(int i=0;i<n;i++){
26 if(*(arr+i)>*max){
27 *max=*(arr+i);
28 }
29 }
30
31 }
32
33 void arr_min(int *arr,int n,int *min){
34 for(int i=0;i<n;i++){
35 if(*(arr+i)<*min){
36 *min=*(arr+i);
37 }
38 }
39
40 }
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》主函数调用函数实现
1 #include<stdio.h>
2 //输入函数
3 void arr_input(int (*a)[4],int h,int l);
4
5 //输出函数
6
7 void arr_output(int (*a)[4],int h,int l);
8
9 //求最大值函数
10 void arr_max(int (*a)[4],int h,int l);
11
12 int main(int argc,const char *argv[])
13 {
14 int a[3][4];
15 arr_input(a,3,4);
16 arr_output(a,3,4);
17 arr_max(a,3,4);
18 return 0;
19 }
20
21
22 //输入函数
23 void arr_input(int (*a)[4],int h,int l)
24 {
25 for(int i=0;i<h;i++){
26 for(int j=0;j<l;j++){
27 scanf("%d",(*(a+i)+j));
28 }
29 }
30
31 }
32
33
34
35 //输入函数
36 void arr_output(int (*a)[4],int h,int l)
37 {
38 for(int i=0;i<h;i++){
39 for(int j=0;j<l;j++){
40 printf("%d ",*(*(a+i)+j));
41 }
42 printf("\n");
43 }
44
45 }
46
47
48
49 void arr_max(int (*a)[4],int h,int l)
50 {
51 int max=a[0][0];
52 for(int i=0;i<h;i++){
53 for(int j=0;j<l;j++){
54 if(*(*(a+i)+j)>max){
55 max=*(*(a+i)+j);
56 }
57 }
58 }
59
60 printf("最大值为:%d\n",max);
61
62
63
64 }