第五章 程式結構

來源:互聯網
上載者:User

標籤:c++學習筆記 結構

傳回值

系統自動產生傳回值的副本,該副本可以在程式中的返回點獲得

函數原型聲明

除非函數的定義在相同源檔案的前面,否則必須使用函數原型聲明(通常在#include和using之後):

#include <iostream>

using namespace std;

double power(double x,int y);  //函數原型聲明,形參可以和函數實現不同甚至唯寫double,int

int main()

{

   x=power(y,z);

}

double power(double x1,int y1)   //函數實現

{}

函數傳遞實參的兩種形式:

一、形參是普通變數(不是引用)

1.按值傳遞機制

實參根本沒有傳遞給函數,而是和實參具有相同值的副本傳遞給函數,所以函數的執行並不會影響實參:

int x=1;

int change(x);

不管change函數如何,int x都不會被改變

2.給函數傳遞指標實參

傳遞的是和實參指標儲存相同地址的指標副本,因為指向的地址相同,所以可以改變被指向的地址

例:

void change(int*);

int main()

{

    int x=10;

int* px=&x;

change(px);

cout<<*px<<endl;

}

void change(int* px)

{

*px+=10;

}

結果:

10

3.給函數傳遞數組

實質上是給函數傳遞指標,傳遞指標副本(編譯器將數組名轉換為指標)而不是數組副本(複製數組需要很大開銷)

void change(int [],int);

int main()

{

int x[]={1,2,3,4,5};

int count=sizeof x/sizeof x[0];

    change(x,count);

for(int i=0;i<count;i++)

{

cout<<x[i]<<" ";

}

}

//void change(int arrayx[],int count)

void change(int* arrayx,int count)      //和上等價

{

for(int i=0;i<count;i++)

{

arrayx[i]+=1;

}

}

結果:2 3 4 5 6

4.多維陣列

本地C++的多維陣列的本質為數組的數組,所以傳遞的同樣是指標副本(如二維數組傳遞的是指向第一行地址的指標副本)

例:

void change(int [][4],int);

int main()

{

int x[][4]={{1,2,3,4},{5,6,7,8}};

int count=sizeof x/sizeof x[0];

change(x,count);

for(int i=0;i<count;i++)

{

for(int j=0;j<4;j++)

{

cout<<x[i][j]<<" ";

}

cout<<endl;

}

}

void change(int arrayx[][4],int count)

//也可以寫成void change(int (*arrayx)[4],int count)然後下面用++*(*(arrayx+i)+j);的形式,函數原型聲明也要改成相應形式

{

for(int i=0;i<count;i++)

{

for(int j=0;j<4;j++)

{

++arrayx[i][j];

}

}

}

結果:

2 3 4 5

6 7 8 9

二、給函數傳遞引用實參

形參為實參的別名,消除的對實參的複製,允許函數直接存取調用函數中的實參

使用類類型的對象時很有用,因為複製很大的類的類對象要耗費很多時間

例:

void change(int&);

int main()

{

int x=10;

change(x);

int y=20;

change(y);

cout<<x<<" "<<y<<endl;

}

void change(int &x)

{

cout<<"receive"<<x<<endl;  //輸出的是值而不是地址

x++;

}

結果:

receive10

receive20

11 21

註:

引用的基本屬性:聲明並初始化引用之後,不能將其重新分配給另一個變數。但是這裡美執行一次函數都初始化一個新的引用


本文出自 “flyclc” 部落格,請務必保留此出處http://flyclc.blog.51cto.com/1385758/1540150

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.