1. 程式人生 > >C++學習之引用特性

C++學習之引用特性

引用即給變數賦予一個別名,就像外號一樣,我叫李曉明,外號小明,實際都是指李曉明這個人。

#include<iostream>
using namespace std;

int main()
{
	//C++中的引用
	int a = 3;
	int &b = a;//引用要初始化

	b = 10;
	cout << a << endl;

	system("pause");//暫停程式

	return 0;
}

程式的輸出記過就是10,通過b的引用,將a的值改掉了。

結構體中的引用,

#include<iostream>
using namespace std;

typedef struct
{
	int x;
	int y;
}Coor; //座標結構體

int main()
{
	//C++中的引用
	Coor c1;
	Coor &c = c1;

	c.x = 10;
	c.y = 20;

	cout << c1.x << "	" << c1.y << endl;

	system("pause");//暫停程式

	return 0;
}

指標型別的引用是最為複雜的。

格式為:

型別  *&指標引用名=指標;

	#include<iostream>
	using namespace std;


	int main()
	{
		int a = 10;
		int *p = &a;
		int *&q = p;//引用指標
		*q = 20;

		cout << a << endl;

		system("pause");//暫停程式

		return 0;
	}

引用作函式引數,在C語言中有一個例子。

	void fun(int*a, int*b)//完成交換功能
	{
		int c = 0;
		c = *a;
		*a = *b;
		*b = c;
	}

//呼叫時
int x = 10, y = 20;

fun(&x, &y);

可以看出,在函式呼叫時,要寫成取地址(&)x和取地址y。如果用引用的形式的話。
void fun(int &a; int &b)
	{
		int c = 0;
		c = a;
		a = b;
		b = a;
	}

int x = 10, y = 20;
fun(x, y);

那麼,引用和指標實際上都是對記憶體直接進行操作,他們有什麼去區別和練習呢。

指標是某塊記憶體的地址,而引用是某塊記憶體的別名。

區別:

1. 指標是一個實體,而引用只是個別名;

2. 指標需要用*才能操作,引用不需要;

3. 引用需要初始化,在初始化後不能改變,而指標的初始化不是必須的,且可以改變;

4. 引用沒有const,指標可以有const;

5. 引用不能為空,指標可以為空;

6. sizeof()操作,對指標來說是定長,而對引用來說是其資料型別的size;

7. 指標的++和引用的++操作也是不一樣;

8. 指標需要為其分配記憶體,而引用不需要,因為是對已有的記憶體的引用。

相關推薦

C++學習引用特性

引用即給變數賦予一個別名,就像外號一樣,我叫李曉明,外號小明,實際都是指李曉明這個人。 #include<iostream> using namespace std; int main() { //C++中的引用 int a = 3; int &

C++學習如何理解*&,即指標的引用

指標大家都知道啦, 然後你需要知道指標的指標 如int **p; 將指標的指標分層理解: int *(*p);括號內的整體表示一個指向int型別的指標物件,這時*p中的p自然就是指向指標的指標了。 接下來看int *&p; 也來分層理解,表示為  int *(&

C# 學習接口(寫給自己,沒有權威,歡迎糾正)

教程 pub oid 沒有 命名 自己 特性 face 但是 重新學習了C#的三大特性,發現接口一直沒有使用,都快忘了,廢話不說,這裏沒有代碼,主要是描述給我自己看的(主要是網上的教程都是W3的,沒有什麽口語化的描述) 1、 接口是需要實例的,在使用的時候一定要實例  

OBJECTIVE-C學習宏定義

list com 學習 c學習 ive 宏定義 objective cti lis %E6%B5%85%E8%B0%88aNDROID%E7%89%88%E6%9C%AC%E7%9A%84%E5%8C%BA%E5%88%AB http://music.baidu.com/

C++學習路——直接插入排序

sin alt nbsp namespace ios include 數據結構 log ins 一個人獨自學習,感覺有進步就滿足,即便是數據結構沒學好,算法也找不清思路,但把人家的代碼看看理解好打出來,也挺滿意的。 1 #include <iostrea

C#學習設計模式:工廠模式

缺陷 進行 type 系列 concrete 改變 cnblogs static 優劣   最近研究一下設計模式中工廠模式的應用,在此記錄如下:   什麽是工廠模式?   工廠模式屬於設計模式中的創造型設計模式的一種。它的主要作用是協助我們創建對象,為創建對象提供最佳的方式

C++學習控制程序流程

技術 bubuko ++ 分享圖片 程序 log .com 圖片 ali 使用 if...else進行條件編程 C++學習之控制程序流程

C++學習Pair

!= pos 包含 string類 spa 操作 vector cond 運行 一、Pair類型概述 pair是一種模板類型,其中包含兩個數據值,兩個數據的類型可以不同,基本的定義如下: pair<int, string> a; 表示a中有兩個類

C++學習路(六):關於C++提供的強制類型轉換

code 記錄 是不是 通過 行修改 單元 c語言 enum 表達式 C語言中提供了舊式的強制類型轉換方法。比如: int a =1; char *p = (char *)&a; 上述將a的地址單元強制轉換為char類型的指針。這裏暫且不說上述轉換結果是否合理,但

C++ 學習 Struct

man 包含 基礎 滿足 問題 private繼承 UC c++ 什麽 轉自https://blog.csdn.net/bestconvenient/article/details/30734139 最開始,就讓我們來討論一下一個最最基本,也最最容易被人忽視掉的問題&m

c++ 學習常用時間函數一覽

差異 進行 學習 當前時間 沒有 使用 ++ 本地 轉換 c++ 學習之常用時間函數一覽 時間的種類 本地時間:UTC + 時區差 = 本地時間 UTC(世界協調時):以地球自轉為基礎的時間標準。 GMT(世界時,格林威治時間):對地球轉速周期性差異進行校正後的世界時。 一

C++學習路(十):虛繼承引入的執行效率

存取 ++ 移位 繼承 模型 虛函數 必須 執行 amp 這篇文章不知道取啥名字了,暫且這樣叫,直接看場景就明白了。節選自《深度探索C++對象模型》 Point3d origin, *pt = &origin; (1)origin.x = 0; (2)pt->

C++學習Visual Studio安裝以及首次使用

以及 ctr 打開 兩個 調試 5-0 nbsp 啟動 com 一、安裝Visual Studio 首先下載Visual Studio 鏈接: http://pan.baidu.com/s/1pLhJt0Z 密碼:uqyc 將.ios文件解壓得到以下文件: 點擊vs_u

C#學習路】001.基本操作

arp main cti 字符 thread 程序 AI 報錯 float 001【HelloWorld】分析代碼塊 //這裏是註釋 下面是引入命名空間 using System; using System.Collections.Generic; using Syst

C++學習路目錄

第一個 綜合 目錄 學習之路 程序 空白 問題 常見問題 控制臺 C++學習之路目錄 第一章  開始學習C/C++ 開發平臺 第一個程序 代碼與程序 C語言和C++語言 第二章  控制臺輸入與輸出 控制臺輸出 控制臺輸入 註釋 空白 常見問題 綜合例題 C++學習之路

c++學習字符串拼接

com 字符數 操作 string類 c++ 問題 span mage 實現 在這裏,強調這樣一個問題: 可以看出,c++中,定義了string類,string 類方便我們進行字符串的一些操作,而不是像C語言中采用字符數組的方式或者指針的方式,通過上面的一些描述,可以發現

c++學習路:2.預設引數&函式過載&堆記憶體分配

預設引數 規則:程式從右向左延伸讀取 例子:如下sortarr函式,在創造函式的時候可以直接賦值,這樣執行的時候就執行預設值。 又如debug函式,不傳參就會列印------------------; 函式過載 理解:幾個同名函式,所設有的引數不一樣,就代表為不同函式。 所以傳參的時候

C++學習筆記 引用摺疊與完美轉發

完美轉發僅僅發生於當呼叫該函式時會發生型別推倒 如 template<typename T> void test(T&&a){ } 如下情況CallService並不會發生完美轉發 template<typename R,typena

C++學習連結串列

1.1建立與遍歷連結串列 #include<iostream> using namespace std; struct Student { long number; float score; Student*next; }; Student * head;//定義頭結點

C++學習

C++ & 演算法學習之旅(一) 大家好,暫且大家叫我順子吧,從今天起,要開始c++ 和 演算法學習之旅了,自己會把學到的,從書上看到的,所思考的總結成部落格,供大家一起學習思考。 我會堅持更新部落格,堅持就是勝利!演算法之路長漫漫,在這裡之所以選擇C++,是因為C++