在c++指標的用處很大,可以快讀的訪問位址空間,而且本身不佔太大記憶體。指標操作在引數傳遞的時候非常方便。既可以作為傳入引數,又可以作為返回值。但是可不可作為函式的傳出引數呢?下面通過乙個例子來說明。
教室裡面包含多個老師,每個老師管理多個學生
學生類
#pragma once
#include
class
student
std::string&
getname()
private
:int _id =0;
//學生編號
std::string _name;
//學生姓名
};
#include
"student.h"
student::
student()
student::
student
(int id, std::string name)
student::
~student()
教師類
#pragma once
#include
#include
class
student
;class
teacher
void
addstudent
(student* stu)
; std::vector
>
&getstudentlist()
private
: std::string _name;
//老師姓名
std::vector
> _studentlist;
//學習列表
};
#include
"teacher.h"
teacher::
teacher()
teacher::
teacher
(std::string name)
teacher::
~teacher()
void teacher::
addstudent
(student* stu)
教室類:
#pragma once
#include
//教室
class
teacher
;class
student
;class
classroom
;
#include
"classroom.h"
#include
"teacher.h"
#include
"student.h"
classroom::
classroom()
classroom::
~classroom()
void classroom::
addteacher
(teacher* teacher)
student* classroom::
getstudenbyid
(int id, teacher* teacher)}}
return
nullptr;}
student* classroom::
getstudenbyid_v2
(int id, teacher*
&teacher)}}
return
nullptr;}
student* classroom::
getstudenbyid_v3
(int id, teacher&teacher)}}
return
nullptr
;}
客戶端:
classroom* room =
new classroom;
teacher* zhangteacher =
newteacher
("張老師");
teacher* liteacher =
newteacher
("***");
room-
>
addteacher
(zhangteacher)
; room-
>
addteacher
(liteacher)
; student* astudent =
newstudent(1
,"a");
student* bstudent =
newstudent(2
,"b");
student* cstudent =
newstudent(3
,"c");
student* dstudent =
newstudent(4
,"d");
student* estudent =
newstudent(5
,"e");
zhangteacher-
>
addstudent
(astudent)
; zhangteacher-
>
addstudent
(bstudent)
; liteacher-
>
addstudent
(cstudent)
; liteacher-
>
addstudent
(dstudent)
; liteacher-
>
addstudent
(estudent)
; teacher* teacherx =
nullptr
; student*studentx = room-
>
getstudenbyid(3
, teacherx)
; teacher* teachery =
nullptr
; student*studenty = room-
>
getstudenbyid_v2(3
, teachery)
; teacher teacherz;
student*studentz = room-
>
getstudenbyid_v3(3
, teacherz)
;
執行一下,檢視變數:
teacherx 為空 teachery 和teacherz分別獲得了正確的值。因為第乙個函式傳入的是teacher的指標,也就是相當於乙個臨時變數,函式呼叫的時候,就是重新複製乙份臨時指標變數,和函式外面的指標變數沒有任何關係,所以就是失敗。
可以採用傳遞引用或者指標引用的方式,就是通過函式引數來獲取函式的返回值。
aaa
c 引用 指標
1.引用的作用 給變數起乙個別名,是c 對c的擴充。原名和別名有相同的位址,根本上就是同乙個東西,只是名字不一樣。c 的引用機制主要是為了用作函式引數,增強函式傳遞資料的能力,比如swap函式,引用就是為了直接修改實參。2.宣告方式 int a int b a 緊跟在資料型別後,即為引用宣告符,其他...
C 引用 指標
1.引用的概念及用法 引用 引用不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名。例如 int b a b是a的引用,即b是a的別名。引用的特點 a.乙個變數可取多個別名 b.引用必須初始化 int b 不知道b是誰的別名 c.引用只能在初始化的時候引用一次,不能改變為再引用其他的變數 ...
c 引用 指標。
一 什麼是引用 reference 已經存在的物件的另外乙個名字。引用有什麼特別的?1.引用在定義時,以 開頭。2.引用不是物件,只能繫結在物件上。所以必須在初始化的時候,指定引用繫結的物件。而且引用繫結是不可以改變的。int val 0 int refval val 不允許這樣初始化int ref...