1. 程式人生 > >C++學習之const指標和多維陣列

C++學習之const指標和多維陣列

這裡的指標和後面講的多維陣列沒有任何關係,之所以放在一篇文章中是因為,兩個的內容都很少。 

const int *p1;  表示指標p1指向的內容是不可改變的

 int *const p2;  表示指標地址是不可改變的

 const int *const p3;  表示指標的地址和內容都不可改變

有關const定義的量裡,不可改變的是頂層const,可改變的是底層const。

const變數作為函式形參:

通常,函式 void  func(const int &i);對於不需要改變的值,我們將它定義為const形式,以保證函式不會改變這個變數。

在函式過載中,void func(const int i);和void func(int i);是不可以過載的,雖然兩個函式的引數型別不同,但是當我們用實參初始化形參時,編譯器會自動忽略頂層const。也就是說,當形參有頂層const的時候,傳給它常量物件和非常量物件都是可以的。而你呼叫func(int i)時也能傳入非常量物件,這時編譯器就無法區分你到底是想要呼叫哪一個func函數了。

注意:可以使用非const物件來初始化一個底層const,但是不能用const物件初始化一個非const物件。如:

int i;

const int &r =  i;

const int *p = &i;

int *q = p;   //wrong !

int  &r1 = r; //wrong !

總之就是不能把一個const變數賦值給一個非const變數!!

多維陣列:int  a[3][4],這個好理解,實際上二維陣列就是陣列組成的陣列,在這裡a中一共有三個元素,每個元素都是一個長4的陣列。

int  aa[10][20][30]表示陣列aa有10個元素,每個元素長20,這20個的長度中,每個都有30個元素。這樣說不是很清楚,來換一種思想:共有10個父親節點,這10個父節點均有20個孩子節點,每個孩子節點又都有30個子節點

。即用樹的概念去理解多維陣列。

相關推薦

C++學習const指標陣列

這裡的指標和後面講的多維陣列沒有任何關係,之所以放在一篇文章中是因為,兩個的內容都很少。  const int *p1;  表示指標p1指向的內容是不可改變的  int *const p2;  表示指標地址是不可改變的  const int *const p3;  表示指標

指標陣列C Primer Plus)解釋

討論最簡單的二維陣列形式: int array[4][2]={{2,4},{6,8},{1,3},{5,7}};  1.  我們知道,陣列名同時代表陣列首元素的地址。array 是這個二維陣列的名字,array 也是這個二維陣列的首元素的地址。 注意array 這個二維陣列

圖解c/c++多級指標與“陣列

本文來源於https://www.cnblogs.com/chenyangyao/p/5222696.html,複製發表僅便於個人學習。 宣告:本文為原創博文,如有轉載,請註明出處。若本文有編輯錯誤、概念錯誤或者邏輯錯誤,請予以指正,謝謝。 指標與陣

C++陣列指標陣列

陣列不是指標,陣列名的值是一個指標常量。 依據《c和指標》《c專家程式設計》上的例子,來總結一下。 int array[10]; int *ap =array + 2; 然後會有以下例子: 在c/c++中,array[2],2[array]是一樣的,源自於同

C語言陣列篇(五)多級指標陣列指標的區別

多級指標   以二級指標為例 二級指標的由來是 指標陣列 的指標形式. int *p[10] 讀取的順序是 p[10] --> 10個空間的陣列 * p[10] --> 這10個空間的數組裡面存放的資

C++學習分支語句邏輯運算子(if語句、邏輯表示式、字元函式庫(cctype)?:運算子)

1.當C++程式必須決定是否執行某個操作時,通常使用if語句來實現操作。if有兩種格式:if和if else. if(test-condition) statement 如果測試條件為true,則if語句將載入程式執行語句或語句塊;如果條件是false,程式將跳

C++學習分支語句邏輯運算子(switch語句,breakcontinue語句)

1.switch語句 switch(integer-expression) { case label1:statement(s) case label2:statement(s) ....... default :statement(s

c++學習new int()new int[]的區別

new int[] 是建立一個int型陣列,陣列大小是在[]中指定,例如: int * p = new int[3]; //申請一個動態整型陣列,陣列的長度為[]中的值 new int()是建立一個

C++學習“智慧指標

寫在前面 1.為什麼需要智慧指標 2.智慧指標的使用及原理 3.各種版本的智慧指標瞭解及實現 auto_ptr: c++ 98 (管理權轉移) unique_ptr: c++11 (防拷貝) scoped_ptr: boost庫 (防拷貝) shared_ptr: c++11 (共

c++學習筆記(13) 繼承

繼承:從已有的類派生出新類 基類和派生類 不同的類之間可能有很多共通的屬性和行為,這些屬性和行為允許在一個類中通用化並被其他類所共享。類C1從類C2擴充套件而來,則C1稱為派生類,C2稱為基類,基類也稱為父類或者超類,派生類稱為子類,一個子類繼承了其父類所有可訪問的資料域和函式。同時可以增加

c++繼承多重繼承繼承

多重繼承 概念 多重繼承是一個類的父類也有父類。 多重繼承的物件初始化方式最高的父類到子類。 A()–>B–>C() 銷燬時正好是初始化的反順序。 ~C–>~B–&

python學習使用UDP執行緒實現一個群聊天室

        在學習UDP的時候,想著試一試能不能搞一個命令視窗的udp聊天工具,因為udp的廣播機制,所以就想著乾脆直接搞一個群聊的吧。不過最後搞來搞去,命令視窗下使用多執行緒,沒有做出什麼好看整潔的“圖形化”介面,湊合著用吧,畢竟是一個練習的學習型的小玩意。有時間把列印

c 學習體會 使用 ref out 傳遞陣列(downmoon)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

“全棧2019”Java第三十一章:二陣列陣列詳解

難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文連結 “全棧2019”Java第三十一章:二維陣列和多維陣列詳解 下一章 “全棧2019”Java第三十二章:增強for迴

圖解陣列指標陣列(附:為什麼指標加一,地址不一定加一)

這裡不是單純討論什麼是陣列指標,什麼是指標陣列,而是在掌握了一些知識後再回頭看看陣列指標與陣列到底怎麼理解。(陣列指標:指向陣列的指標。指標陣列:指標構成的陣列)  先放上一道題: 答案是10,20,30。 雖然是很常見的題,對於一個剛開始學C語言可能就可以做出來,但

vector中儲存指標 陣列動態分配記憶體

int num = 2; vector<int*> v(16); v.push_back(NULL); v.push_back(&num); v.push_back(NULL);

C 】作為函式引數的陣列

我們都知道一維陣列作為函式引數的情況,作為函式引數的一維陣列名——實際傳遞的是指向陣列第一個元素的指標。 多維陣列名作為函式引數的傳遞方式和一維陣列名相同——實際傳遞的也是指向第一個元素的指標。 但是,兩者之間不同的是,多維陣列的每個元素本身就是另外一個數組,(例如二位陣

二級指標陣列詳解(轉)

一個函式形如: void f(float **p){ /* 想要在函式體中按二維陣列的方式訪問*/     p[1][1] = 0;//c++用vc編譯ok,執行出錯(非法訪問) } float **p; //其實這裡的p並不是一個二位陣列的指標,只不過是一個指向指標的指標 像你這樣訪問肯定是

PHP[陣列轉字串]{陣列轉一陣列}

/** * @method 多維陣列轉字串 * @param type $array * @return type $srting * @author yanhuixian */ function arrayToString($arr) { if (is_array($ar

C語言:使用指標操作二陣列

任務程式碼: (1)用指向二維陣列元素的指標: #include <stdio.h> int main( ) { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a