1. 程式人生 > >引用,指標,常量引用,常量指標,指標常量的區別

引用,指標,常量引用,常量指標,指標常量的區別

1.指標:指標代表一個變數的地址;
例如:
int a =2,b = 1,*pi = &a;
pi= &b;

2.引用:引用即針對一個變數的別名,引用必須被初始化,引用作為引數(形參)時,不會像指標一樣使用儲存單元,更不會像值傳遞一樣建立該引數的副本,提高空間/時間效率。
例如:int a=2,&b = a;
3.常量引用:格式為 const 變數型別 &變數名,當宣告該引用時,不可通過引用對其目標變數的值進行修改,變數自身可以修改,可用於保證函式內形參不可更改,也就是保證傳入的實參為常量。
4.指向常量的指標:(《C++ Primer》書中名字是指向常量的指標

,以網上的叫法為準),const int *p;其本質為一個指標,因為該指標指向一個常量,所以不能通過該指標修改常量的值,但該指標指向的也可為變數,重點在於不能通過該指標修改指向變數(常量)的值;
5.常量指標:(《C++ Primer》書中名字是常量指標),int* const p;其本質為一個常量,所以其指向的值可以改變,但是由於指標為常量,所以宣告時必須初始化,且初始化後存放在指標中那個地址不可改變,此地址對應的非常量值仍可被改變。

總結: const在*的左邊,則為指向常量的指標,即指標指向的變數的值不可直接通過指標改變(可以通過其他途徑改變);const在*的右邊,則為常量指標,即指標的指向不可變。簡記為“左定值,右定向”

const的“左定值,右定向”

相關推薦

關於常量指標引用

int main() { int n[3] = { 3,4,5 }; const int * const p = n; //既然有指向指標的引用,就不難想到指向常量指標的引用。 //於是就有如下嘗試 //const int * (&r) = p; //結

指標引用 指標常量常量指標

1.差別:指標可以操縱兩個實體,一個是制針值,一個是指向的值,一次指標可以改變關聯的實體,即指向的實體。而引用只能操縱一個實體。 2.引用定義時必須初始化,這是它與指標根本不同的地方。一旦引用誕生,就確定了它與一個實體的聯絡,這種聯絡是打不破的,直到引用自身的滅亡 3.指標

引用,指標,常量引用,常量指標,指標常量區別

1.指標:指標代表一個變數的地址; 例如: int a =2,b = 1,*pi = &a; pi= &b; 2.引用:引用即針對一個變數的別名,引用必須被初始化,引用作為引數(形參)時,不會像指標一樣使用儲存單元,更不會像值傳遞一樣

C++常量詳解(一)常量指標常量引用的初始化

1、常量 1.1、常量的初始化: const物件一旦建立後其值就不能再改變,所以const物件必須初始化。這裡我們要注意一點,像const int *p和const int &r都並不是const物件。因為const int *p只是表示

C語言指標——對普通變數的指標操作和對陣列(常量)的指標操作

       我們知道,每一個變數都有一個記憶體位置,每一個記憶體位置都定義了可使用連字號(&)運算子訪問的地址,它表示了在記憶體中的一個地址。        我們喜歡在程式中使用指標代替陣列,因為變數指標可

C語言中的 指標常量(*const)和常量指標(const*)的區別(很重要!!!)

參考連結:https://blog.csdn.net/qiu931110/article/details/80580295   這個哥們講的還可以,但是我想用白話在描述一下,方便理解:   const限定符作用於指標 常量指標(先常量限制符號,在指標符號,co

字串常量儲存在字元指標和字元陣列的區別

C語言中字串常量的儲存方式有兩種:字元指標和字元陣列中。 就我目前所能理解到的程度,這兩種方式的區別如下: 字元指標: char *m = “February”; 可以寫成: char *m; m = “February”; 字元陣列: char s[] = {

【 C/C++學習筆記整理】--1.常量的用法、指標與陣列的區別

巨集常量與const常量的區別: 指標與陣列的區別: ++i和i++的區別: 求X的n次冪   pow(X,n); 1.巨集常量與const常量的區別: 巨集常量,如 #define MAX_NUM 65536   本質為字

關於“指向常量字串的字元指標不可更改字串內容”的理解及引申

一、程式碼說明: #include <iostream> using namespace std; int main() { string str = "hello1"; // 字串變數 // 字元陣列,先在常量區儲存"hello2",然後在棧區申請記憶體空間, //

常量指標(pointer to constant)和指標常量(constant pointer)

  一個指標可以操作兩個實體,一個是指標值(即地址),一個是間訪值(即指向的實體)。於是指標的常量性也分為兩種:常量指標(pointer to constant)和指標常量(constant pointer)。   指標常量是相對於指標變數而言的,也就是指標值不能修改的指標。常量指標是指向常量的指標的簡稱。

指標指向字串常量和陣列存放字串常量(char *p="abcd", char p[]="abcd")

指標指向字串常量和陣列存放字串常量(char *p=”abcd”, char p[]=”abcd”) 程式碼 結果 分析 fun()函式 首先abacd字串是在靜態常量區分配的記憶體,然後指標c在棧裡分配的記憶體,然後將指標指向”abacd”

推薦形參使用常量引用:void func(const T &);

highlight ons void 由於 turn con font amp return 一、聲明為const的原因: 把函數不會改變的形參定義成普通的引用會帶給函數的調用者一種誤導,即函數可以修改它的實參的值; 限制函數所能接受的實參類型,如不能把const對象、字

常量引用

eache 空間 分配內存 cos name 內存空間 struct spa 編譯 思考cost int &a = b PK const int &a = 10; 在C++中可以聲明const引用 const Type& name = var; co

5、【C++】指標/引用指標引用區別

一、指標 int p=12; int *q; int *q=&p;     這裡p為int型別的變數,&p就是p的記憶體地址,*q是一個int型別的變數(是一個值),q為指標是地址,int q=&p;把p的地址賦給了指標q,所以q就

深入理解c++指標指標指標引用

轉載自:https://www.cnblogs.com/li-peng/p/4116349.html 展示一下使用指標的指標和指標的引用修改傳遞給方法的指標,以便更好的使用它。(這裡說的指標的指標不是一個二維陣列) 為什麼需要使用它們 當我們把一個指標做為引數傳一個方法時,其實是把指標的複

使用常量引用形式,將map作為形參傳遞時的問題

void test(const unordered_map<int,int> &um){ if(um[1]){ //一段測試程式碼 } } 上述程式碼將不能通過編譯。 原因:map的[]運算子會在索引項不存在的時候自動建立一個物件,而常量不能改變。 解

“非常量引用的初始值必須為左值”問題

參考:http://blog.sina.com.cn/s/blog_6d6f47690101dgwi.html 改正了原博文的某些疏漏。 首先,先看下面一個例子: int main(){ int i =2; double &r =i; return 0; }

指標引用 作為函式引數

*和& * * 有兩個作用,一個是作為識別符號來表示這是一個指標(宣告變數時的等號左邊),也就是說存放的是地址,另外一個是作為運算子來取值(賦值等號左邊)。 int *p=NULL; int a = 1; p = &a; cout<<p<<

C++中指標引用區別、以及引用和取地址符&的區別

一. 指標和引用的區別 對於指標來說,它是一個地址,這個地址是一個數值,那麼就意味這個數值可以為0(空指標),也可以為其他,即指標可以不指向任何東西。 而對於引用來說,他是一個外號,外號一定是“某個存在物體”的外號,所以引用不能為空,即不能存在空引用。例如我們給小明起了個外號:明明,那我們說

C++11智慧指標引用

最近在學習課程的時候發現一個很困惑的問題,上程式碼 class DataHeader; class LoginResult:public DataHeader; typedef std::shared_ptr<DataHeader> DataHeaerPtr; //原型 void addS