關於C++引用做為函式引數和指標作為函式引數
關於C++引用做為函式引數和指標作為函式引數
個人感覺引用和指標有著很多相識的地方
參考
http://blog.itpub.net/7728585/viewspace-2113049/
我們這裡編寫兩段函式如下:
1、
AT_NAME & at_r (AT_NAME & cp,const AT_NAME & in_s)
{
cp = in_s;
return cp;
}
2、
AT_NAME* at_p (AT_NAME *cp , const AT_NAME* in_s)
{
*cp = *in_s;
return cp;
}
第一段完全使用C++引用而後一段完全使用指標,實際上引用和指標都是指向同一個變數的或者說
一段記憶體。
比如 AT_NAME & cp,const AT_NAME & in_s 實際上不是值的複製而更像是傳的地址,返回的的引用
當然也相當於原地址。和指標基本相同。
完整程式如下:
1 /*************************************************************************
2 > File Name: yinyong.cpp
3 > Author: gaopeng
4 > Mail:
5 > Created Time: Wed 01 Jun 2016 06:09:47 PM CST
6 ************************************************************************/
7
8 #include<iostream>
9 #include <stdio.h>
10 using namespace std;
11
12
13 typedef struct att_name
14 {
15 char name[10];
16 unsigned int ages;
17 unsigned int height;
18 } AT_NAME;
19
20 AT_NAME & at_r (AT_NAME & cp,const AT_NAME & in_s);
21 AT_NAME* at_p (AT_NAME *cp , const AT_NAME* in_s);
22
23 int main(void)
24 {
25 AT_NAME a1 = {"顏蕾",28,120};
26 AT_NAME a2 = {"高鵬",30,170};
27 AT_NAME a3 = {"高子涵",4,30};
28
29 AT_NAME cp1;
30 AT_NAME cp2;
31 AT_NAME cp3;
32 AT_NAME cp4;
33
34 at_r( cp1 , a1 );
35 at_p( &cp2 , &a2 );
36
37 at_r(cp3 , a1 ) = a3;
38 *(at_p( &cp4 , &a2 )) = a3;
39
40 printf("%s ,%d ,%d\n",cp1.name,cp1.ages,cp1.height);
41 printf("%s ,%d ,%d\n",cp2.name,cp2.ages,cp2.height);
42 printf("%s ,%d ,%d\n",cp3.name,cp3.ages,cp3.height);
43 printf("%s ,%d ,%d\n",cp4.name,cp4.ages,cp4.height);
44 }
45
46
47 AT_NAME & at_r (AT_NAME & cp,const AT_NAME & in_s)
48 {
49 cp = in_s;
50 return cp;
51 }
52
53 AT_NAME* at_p (AT_NAME *cp , const AT_NAME* in_s)
54 {
55 *cp = *in_s;
56 return cp;
57 }
這段程式有2個需要注意的地方
1、at_r(cp3 , a1 ) = a3
*(at_p( &cp4 , &a2 )) = a3
這兩個方式都可以完成,為什麼正確是因為他們都是一段有效結構體記憶體,然後他們和a3相等是可以完成的。
完成這個步驟後cp3 = a3 ,cp4 = a3
2、函式都使用了return cp,返回引用或者指標
比一般的方式比如:
AT_NAME at_p ( const AT_NAME* in_s)
{
AT_NAME temp;
temp = *in_s;
return temp;
}
int main(){
....
cp3 = at_p( &a2);
....
}
比起這種方式直接返回引用或者指標,可以避免建立一個臨時變數的記憶體,效率較高
這裡at_p( &a2)就會建立一個臨時變數用於儲存函式返回的結構體temp。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2116526/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 函式作為引數傳遞函式
- 物件,函式作為一個函式的引數物件函式
- 對 “C語言指標變數作為函式引數” 的個人理解C語言指標變數函式
- 陣列作為函式引數陣列函式
- C/C++—— 寫一個函式,它的引數為指向函式的指標,返回型別也為指向函式的指標C++函式指標型別
- js函式作為函式的引數程式碼例項JS函式
- GO語言————6.7 將函式作為引數Go函式
- 函式引數 引數定義函式型別函式型別
- 函式基礎和函式引數函式
- 函式定義、函式的引數、函式的預設引數函式
- JavaScript replace()第二個引數為函式時的引數JavaScript函式
- Go語言Slice作為函式引數詳解Go函式
- 物聯網學習教程— 字元指標作函式引數字元指標函式
- c++函式引數和返回值C++函式
- javascript函式引數和函式內同名變數的關係JavaScript函式變數
- 3.3.2 函式的預設引數和佔位引數 函式過載函式
- C#的Replace函式,使用函式作為的引數需要注意C#函式
- c++中物件的引用作為函式的引數C++物件函式
- TypeScript 函式可選引數和預設引數TypeScript函式
- javascript為函式設定預設引數JavaScript函式
- Python函式/動態引數/關鍵字引數Python函式
- 函式的關鍵字引數函式
- C++ 函式的可變引數C++函式
- Javascript函式引數求值——Thunk函式JavaScript函式
- 【函式引數】Oracle 11g中使用“=>”顯式指明函式引數名與引數值的對應關係函式Oracle
- C++行內函數、函式過載與函式預設引數C++函數函式
- 函式名作為引數傳遞 與 回撥函式函式
- 函式、引數、解構函式
- 函式引數詳解函式
- Python之在函式中使用列表作為預設引數Python函式
- Oracle:SYS_REFCURSOR作為函式中的輸出引數Oracle函式
- Golang 切片作為函式引數傳遞的陷阱與解答Golang函式
- 函式的呼叫方式和引數函式
- JavaScript為事件處理函式傳遞引數JavaScript事件函式
- 第 8 節:函式-函式定義和引數函式
- 傳遞指標引數(函式內部給指標賦值)示例指標函式賦值
- PHP函式,引數,可變參函式.PHP函式
- C++ main函式命令列引數使用C++AI函式命令列