參數傳遞的意義和作用

我們先來考慮爲什麼需要參數傳遞。
首先,函數之間共享數據是通過參數傳遞完成的
其次,它是函數封裝的體現。
(1)外界對函數的影響僅限於傳遞的參數,把函數內的具體實現細節對外隱藏,只要參數不變,不影響函數的使用
(2)函數對外界的影響僅限於函數的返回值以及傳數組及指針形參
那麼有幾種參數傳遞形式呢?
下面我們就來依次介紹!

一.參數傳遞——值傳遞

方式:函數的形參的類型爲簡單變量
當實參傳遞形參時,系統會建立一份實參的拷貝給形參。當函數調用完畢,這份實參的拷貝消失。
特點:傳值調用不會影響實參的值

二.參數傳遞——地址傳遞

地址傳遞的特徵,形參的改變會影響實參的改變
1.地址傳遞——傳數組的首地址
數組名作函數參數時所進行的傳送是地址的傳送,也就是把實參數組的首地址賦予形參數組名。形參數組名取得該首地址之後與實參數組爲同一數組,共同擁有一段內存空間。
程序示例:
(1)定義函數,功能是求出一維數組的最大值

#include<iostream>
using namespace std;
int Max(int b[],int n)
{
    int max=b[0];
    int i;
    for(i=1;i<n;i++)
    if(b[i]>max)
        max=b[i];
    return max;
}
int main()
{
    int i;
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    cout<<Max(a,10)<<endl;
    return 0;
}

(2)對一維數組元素左移n位
a[10]={1,2,3,4,5,6,7,8,9,10},移動5位
則爲a[10]={6,7,8,9,10,1,2,3,4,5}

#include<iostream>
using namespace std;
void  fun(int *b,int m,int n)//m是數組有多少個數,n是向左移幾位
{
    int i,j;
    for(i=1;i<=n;i++)
    {
        for(j=0;j<m-1;j++)
        {
            int t;
            t=b[j];
            b[j]=b[j+1];
            b[j+1]=t;
        }
    }
}
int main()
{
    int i,n;
    cin>>n;
    int a[10]={1,2,3,4,5,6,7,8,9,10};
    fun(a,10,n);
    for(i=0;i<10;i++)
    {
        cout<<a[i];
    }
    return 0;
}

2.傳二維數組的首地址
形參格式:
用指向數組的指針變量
例:

fun(double(*p)[N])

用二維數組
例:

fun(double a[][N])

fun(double a[M][N])

例:3個學生各學四門課,計算總平均分,並輸出第n個學生的成績

#include<iostream>
using namespace std;
void average(float *p,int n)
{
    float *p_end,sum=0,aver;
    p_end=p+n-1;
    for(;p<=p_end;p++)
    sum=sum+(*p);
    aver=sum/n;
    cout<<"average="<<aver<<endl;
}
void search(float (*p)[4],int n)
{
    int i;
    cout<<n<<"學生的成績";
    for(i=0;i<4;i++)
    {
        cout<<*(*(p+n)+i);
    }
}
int main()
{
    float score[3][4]={{65,67,79,60},{80,87,90,81},{90,99,100,98}};
    average(*score,12);//*score爲列指針
    search(score,2);//search爲行指針
}

注:如果直接寫二維數組的名字,就是行指針;取*後就是列指針。
在這裏對二維數組和指針之間的關係做一個歸納:
對二維數組a需要理解下列地址表示的含義:
a——行地址,數組的首地址,第0行首地址
a+i——行地址,第i行的首地址;
a[i]等價於*(a+i)——列地址,第i行第0列的元素地址
a[i]+j等價於*(a+i)+j——列地址,第i行第j列的元素地址
*(a[i]+j)等價於*(*(a+i)+j)等價於a[i][j]——第i行第j列元素值
3.傳引用
這個在之前的引用變量及其作用中已有詳細說明,在此不再多加贅述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章