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++