指標和多維陣列

2021-10-07 18:50:15 字數 1137 閱讀 6694

int ia[3][4] = ,

, }; int(*p)[4] = ia;

for (auto p = ia; p != ia + 3; ++p)

cout << endl;

}

int *ip[4]表示的是整型指標陣列

int (*ip)[4]表示的是指向含有4個整數的陣列

先解釋第乙個**片:外層的for迴圈首先宣告乙個指標p並令其指向ia的第乙個內層陣列,然後依次迭代直到ia的全部3行都處理完為止。其中遞增運算++p負責將指標p移動到ia的下一行。

內層的for迴圈負責輸出內層陣列所包含的值。它首先令指標q指向p當前所在行的第乙個元素。*p是乙個含有4個整數的陣列,像往常一樣,陣列名被自動地轉換成指向該陣列首元素的指標。內層for迴圈不斷迭代直到我們處理完當前內層陣列首元素的指標,給它加上4就得到了終止條件。

當然是用標準庫函式begin和end看起來更加整潔

下面展示一些內聯**片

for (auto p = begin(ia); p != end(ia); ++p)

cout << endl;

}

接下來我們看看(*p)[4]怎麼輸出

for (auto a = p; a != p+3; ++a)

cout << endl;

}

理論上和二維陣列一樣

但是他不能是用標準庫函式begin和end

於是我查了一下函式原始碼

template _nodiscard constexpr _ty* begin(_ty (&_array)[_size]) noexcept 

template _nodiscard constexpr _ty* end(_ty (&_array)[_size]) noexcept

我覺得雖然指標指向陣列和二維陣列的內容是一樣的,但是容器本質還是不一樣的,所以begin(ia)能夠輕鬆識別他是二維陣列;我要在第二種情況不出現錯誤的話給用begin(p[4])去表示。而且後面也不好表示了,

所以用標準庫函式begin和end的時候指標就很難使用了。

多維陣列和多維指標

指向指標的指標 指標變數在記憶體中會占用一定的空間 可以定義指標來儲存指標變數的位址 int pp本質上還是指標,只是兩個 告訴你這是乙個指向指標的指標char p null char p2 p p2 給p賦值沒有問題,但怎麼使用p 呢?這就需要我們前面多次提到的鑰匙 第一步 根據 p 這個變數,取...

多維陣列 和 多維指標

指標變數在記憶體中會占用一定的空間。可以定義指標來儲存指標變數的位址值。舉例 舉例說明,多級指標的使用,重置動態空間大小 include include int reset char p,int size,int new size else return ret int main return 0 ...

多維陣列和多維指標

專題四 指標和陣列 下 包括以下章節 指標變數在記憶體中會占用一定的空間可以定義指標來儲存指標變數的位址值為什麼需要指向指標的指標?指標在本質上也是變數 對於指標也同樣存在傳值呼叫與傳址呼叫 2 1.c include include char p p指向的是乙個char 指標 int size 原...