1. 程式人生 > >函式的引數為引用和指標的區別

函式的引數為引用和指標的區別

C++之所以增加引用型別, 主要是把它作為函式引數,以擴充函式傳遞資料的功能。

到目前為止我們介紹過函式引數傳遞的兩種情況。

1) 將變數名作為實參和形參
這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實參不是同一個儲存單元。

【例】要求將變數i和j的值互換。下面的程式無法實現此要求。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <iostream> using namespace std; int main( ) { void swap(int,int); //函式宣告 int i=3,j=5; swap(i,j); //呼叫函式swap cout<<i<<" "<<j<<endl; //i和j的值未互換 return 0; } void swap(int a,int b) //企圖通過形參a和b的值互換,實現實參i和j的值互換
{ int temp; temp=a; //以下3行用來實現a和b的值互換 a=b; b=temp; }

執行時輸出3 5i和j的值並未互換。

為了解決這個問題,採用傳遞變數地址的方法。

2) 傳遞變數的指標
形參是指標變數,實參是一個變數的地址,呼叫函式時,形參(指標變數)指向實參變數單元。程式見例6.19。

【例】使用指標變數作形參,實現兩個變數的值互換。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

相關推薦

函式引數引用指標區別

C++之所以增加引用型別, 主要是把它作為函式引數,以擴充函式傳遞資料的功能。 到目前為止我們介紹過函式引數傳遞的兩種情況。 1) 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在

函式引數值傳遞、引用傳遞指標傳遞的區別

1)值傳遞:int func(int value) { value++; return value; // 一般需要返回值 } int a=2; int b=func(a); //b==3;a==2;按值

函式中的引數object... object[] 的區別

先給出兩個示例函式 方法1: public void testobject(object... params){ ///省略此處程式碼 } 方法2: public void testobject(object[] params){ ///省略此處程式碼 }   區別

函式返回指標引用指標區別

1,函式不可以返回棧記憶體的指標,但是可以返回堆記憶體的指標,可以free掉兩次指向空的指標,但是不能連續free兩次指向記憶體的指標,會產生已放棄   int main() { int *a; a = (int *)malloc(10); a[0] = 1

c++中引用指標區別

指標和引用的區別: (1)當引用被建立時,它必須被初始化。而指標則可以在任何時候被初始化。 (2)一旦一個引用被初始化為指向一個物件,它就不能被改變為對另一個物件的引用。而指標則可以在任何時候指向另一個物件。 (3)不可能有NULL引用。必須確保引用是和一塊合法

引用指標區別

引用的定義:引用是給另外一個變數起別名,所以引用不會分配記憶體空間。 區別: ①:指標是一個實體,需要分配變數空間;引用只是變數的別名,不需要分配記憶體空間。 ②:引用在定義時必須初始化,並且不能改變;指標在定義時可以不用初始化,並且可以改變指向的地址。 ③:有多級指

padding引數SAMEVALID的區別

1..講解 卷積:conv2 "VALID" = without padding: inputs:1234567891011(1213)|________________| dropped

request.getParameter("name")獲取引數null""空字串的區別

1.獲取到的值為" "空字串 當url裡有name屬性,但是沒有值的時候後臺用request.getParameter("name")獲取的是空字串"" 2.獲取到的值為null 當url裡沒有

c++之引用指標區別聯絡

區別: 1 引用不能為空(必須初始化),指標可為空。 int &a; // error int *a; // ok 2 引用關係一旦被建立,則不能被解除,而指標可以指向別人。 int x = 1, y = 2; int &a = x; a = y;

引用指標作為形參的區別

int n; int &m = n; 在C++中,多了一個C語言沒有的引用宣告符&,如上,m就是n的引用,簡單的說m就是n的別名,兩者在記憶體中佔同樣的位置,不對m開闢新的記憶體空間,對m的任何操作,對n來說是一樣的。 對於引用,有以下三條規則: (1)

java引用指標區別

Java的引用和C++的指標的區別Java的引用和C++的指標都是指向一塊記憶體地址的,通過引用或指標來完成對記憶體資料的操作,就好像風箏的線軸一樣,通過線軸總是能夠找到風箏,但是它們在實現,原理作用等方面卻有區別。(1)型別:引用其值為地址的資料元素,Java封裝了的地址,

引用指標的那些事

2.3.1 引用 引用並非物件,相反的,它只是為一個已存在物件所起的另外一個名字。 示例: int ival = 1024; int &refVal = ival; Tips: 1.除2種情況外,引用的型別要和與之繫結的物件嚴格匹配 2.引用必須被初始化,且一旦初始化後,它和初始值物件一直繫結

c++的引用指標

c++的引用和指標 簡略分析c++的引用和指標之間的聯絡和區別。 1.引用 引用:就是某一變數(目標)的一個別名,對引用的操作與對變數直接操作完全一樣。 引用的宣告方法: 型別識別符號 &引用名=目標變數名; 例:char ch;

引用指標區別

區別: 引用不能為空,當引用被建立時,它必須被初始化;指標可以為空值,可以在任何時候被初始化 一旦一個引用被初始化為指向一個物件,它就不能改變為另一個物件的引用。指標則可以在任何時候指向另一個物件 不可能有NULL引用,必須確保引用是和一塊的合法的儲存單元關聯

9. c++中的const,引用指標

const常量的判別標準 只有用字面量初始化的const常量才會進入符號表 使用其他變數初始化的const常量仍然是隻讀變數 被volatie 修飾const常量不會進入符號表 在編譯期間不能確定初始值的const識別符號,都被作為只讀變數處

GCC設定函式屬性constructordestructor

cc允許為函式設定__attribute__ ((constructor))和__attribute__ ((destructor))兩種屬性,顧名思義,就是將被修飾的函式作為建構函式或解構函式。程式設計師可以通過類似下面的方式為函式設定這些屬性: void funcBef

當資料請求引數檔案其他型別引數時的寫法

@POST("/user/snatchOrder/updateUserInformation") @Multipart //引數有檔案時用這個 Observable<Object> getmylisticon(@Part MultipartBody.Part

有關 陣列作為函式引數 & 區域性變數全域性變數及其應用

一、陣列blabla 1.0陣列元素作函式實參。 (1).陣列元素可以用作函式實參,但不能是形參。(給陣列分配的儲存單元是連續的) 2.0一維陣列名作函式引數。 (1)陣列元素作實參時,向形參變數傳遞的時陣列元素的值。 陣列名作實參時,向形參傳遞的時陣列首元素的地址。

關於C/C++中main函式引數中argcargv的解釋

    相信大家在剛開始看OpenCV的C/C++程式碼時,會有這樣的疑惑:為什麼有些程式碼中main函式的引數中有argc和argv這樣的引數呢??今天就給大家詳細講解一下這兩個引數的含義和用法。      我們經常見到的兩種形式如下: 1. in

C#呼叫非託管函式引數Void* 時,方法

This sample demonstrates how to pass data to an unmanaged function that expects a void pointer as an argument. The sample provides two solutions. The Voi