C++学习:第二章C语言基础 - (十一)函数传参

1. 调用

方法与函数之间的调用成为值传递,只是单纯的复制值进行传递。

形参是函数调用放向函数传递数据用的。

C++学习:第二章C语言基础 - (十一)函数传参_第1张图片

在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;
}

这个例子说明形参数组和实参数组是同一个数组,因为这边传递的是地址

函数每次被调用形参都会被创建,初始化为实参。

 

2. 不定长参数

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

 

你可能感兴趣的:(C++)