方法与函数之间的调用成为值传递,只是单纯的复制值进行传递。
形参是函数调用放向函数传递数据用的。
在C语言中,如果方法的参数表是空的,说明参数表的类型和个数不定,因此可以传参
C语言中的数组传参方式
#include
void print(int a[], int len)
{
}
int main(){
int a[5] = {1,2,3,4,5};
int b[6] = {11,22,33,44,55,66};
print(a,5);
print(b,6);
return 0;
}
这个例子说明形参数组和实参数组是同一个数组,因为这边传递的是地址
函数每次被调用形参都会被创建,初始化为实参。
C语言中对不定参数的支持
以printf为例子,man函数定义可以发现
int printf(const char *format, …);
va_start、va_arg、va_end、va_list 用来处理不定长参数表
man va_start查看详情
我们可以这么写,第一个5代表在后面5个数中选最大
max(5,18,55,33,566,22)
max(“%d%d%d%d%d” ,18,55,33,566,22)
简化为:
int max(int n, …),下面这段代码介绍不定长的几个函数用法
#include
#include
int max(int cnt, …){
va_list v;//保存可变长参数表,va_list是个类型
va_start(v, cnt);//用v保存cnt之后的那么参数表
int i;
int maxVal = va_arg(v, int);//从参数表中取出第一个int类型的参数
for(i=1; i manVal){
manVal = data;
}
}
va_end(v);//终止或者是释放可变长参数表
return maxVal;
}
int main(){
printf(“%d\n”,max(5,18,55,33,566,22));
return 0;
}
下面这段代码是说不定长函数在传参时需要注意的 类型提升问题 和 字符串数组的传参问题(就是一个地址)。
#include
#include
int max(int cnt, …){
va_list v;//保存可变长参数表,va_list是个类型
va_start(v, cnt);//用v保存cnt之后的那么参数表
int i;
int maxVal = va_arg(v, int);//从参数表中取出第一个int类型的参数
for(i=1; i manVal){
manVal = data;
}
}
va_end(v);//终止或者是释放可变长参数表
return maxVal;
}
void printchar(int , cnt, …){
va_list v;
vs_start(v, cnt);
int i;
for(i=0; i