题目:函数之间参数传递的方式有________和________。(富士安全)
答案:值传递,地址传递
题目:简述:函数之间两种参数传递方式的区别。
答案:值传递,在函数调用时使用值传递时,形参接收外部变量的值,形参的改变不会影响到实参的值,只是外部变量值的拷贝;地址传递,在函数调用时使用地址传递时,形参接收外部变量的地址,使得形参指向外部变量,对形参进行解引用操作时,可以改变外部变量的值。
题目:函数main 有那些参数?各代表什么含义? 假如程序a调用如下所示:a 123写出程序a中main 函数的参数的具体值。 (拓仓科技)
答案:main函数有int argc const char *argv[],其中int argc表示终端传递字符串的个数,const char *argv[]表示终端传递字符串,用字符指针数组接收;调用a 123,则argc值为2,argv[0]值为”a",argv[1]值为”123“
题目:用指针作函数参数,编程序求一维数组a[]={11,8,89,7,5,4,32,15,21} 中的最大和最小的元素值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int arr_max(int *p,int size);
int arr_min(int *p,int size);
int main(int argc, const char *argv[])
{
int a[]={11,8,89,7,5,4,32,15,21};
int len=sizeof(a)/sizeof(int);
//输出数组中的最大值
printf("数组元素中最大值为%d\n",arr_max(a,len));
//输出数组中的最小值
printf("数组元素中最小值为%d\n",arr_min(a,len));
return 0;
}
//实现数组中的最大值
int arr_max(int *p,int size){
int max=*p;
for(int i=1;i<size;i++){
if(max<*(p+i)){
max=*(p+i);
}
}
return max;
}
//实现数组中的最小值
int arr_min(int *p,int size){
int min=*p;
for(int i=1;i<size;i++){
if(min>*(p+i)){
min=*(p+i);
}
}
return min;
}
运行结果:
题目:用指针接收函数参数,编程序求二维数组的输入、输出、求最大值
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void arr_input(int (*p)[4],int rows,int cols );
void arr_output(int (*p)[4],int rows,int cols);
void arr_max(int (*p)[4],int rows,int cols);
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 (*p)[4],int rows,int cols ){
int i,j;
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
scanf("%d",&*(*(p+i)+j));
}
}
}
//进行数组元素逐个输出
void arr_output(int (*p)[4],int rows,int cols){
int i,j;
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
printf("%4d",*(*(p+i)+j));
}
printf("\n");
}
}
//找出数组元素最大值
void arr_max(int (*p)[4],int rows,int cols){
int max=**p;
int i,j;
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
if(max<*(*(p+i)+j)){
max=*(*(p+i)+j);
}
}
}
printf("数组中的最大值为%d\n",max);
}
运行结果: