關於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語言指標變數函式
- 函式引數 引數定義函式型別函式型別
- GO語言————6.7 將函式作為引數Go函式
- 函式基礎和函式引數函式
- c++函式引數和返回值C++函式
- Go語言Slice作為函式引數詳解Go函式
- Python函式/動態引數/關鍵字引數Python函式
- 物聯網學習教程— 字元指標作函式引數字元指標函式
- 3.3.2 函式的預設引數和佔位引數 函式過載函式
- TypeScript 函式可選引數和預設引數TypeScript函式
- c++中物件的引用作為函式的引數C++物件函式
- Python之在函式中使用列表作為預設引數Python函式
- 函式的關鍵字引數函式
- Javascript函式引數求值——Thunk函式JavaScript函式
- C++行內函數、函式過載與函式預設引數C++函數函式
- 函式、引數、解構函式
- 函式引數詳解函式
- Python函式的位置引數、關鍵字引數精講Python函式
- 函式的呼叫方式和引數函式
- 第 8 節:函式-函式定義和引數函式
- Oracle:SYS_REFCURSOR作為函式中的輸出引數Oracle函式
- Golang 切片作為函式引數傳遞的陷阱與解答Golang函式
- Python中將函式作為另一個函式的引數傳入並呼叫Python函式
- JavaScript為事件處理函式傳遞引數JavaScript事件函式
- 傳遞指標引數(函式內部給指標賦值)示例指標函式賦值
- python---函式引數、變數Python函式變數
- 07:函式之函式的引數和返回值函式
- Python函式引數總結Python函式
- JavaScript函式傳遞引數JavaScript函式
- 函式的引數傳遞函式
- 程式中的函式引數函式
- 函式中引數傳值函式
- ES6函式引數函式
- python函式變長引數Python函式
- 將函式作為引數傳遞解決非同步問題函式非同步
- 可變資料型別不能作為python函式的引數資料型別Python函式
- 二級指標,二維陣列函式引數傳遞指標陣列函式