C 中的指標 引用 指標引用

2021-10-23 21:32:45 字數 3591 閱讀 5326

在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...