【C++の相關概念】指標陣列陣列指標二維陣列傳參 - 程式人生
文章推薦指數: 80 %
技術標籤:演算法與資料結構の相關概念指標陣列和陣列指標指標陣列:是指一個 ... 但是不能直接省略一二維引數, //因為從實參傳遞來的是陣列的起始 ...
程式人生>實用技巧>其它>【C++の相關概念】指標陣列陣列指標二維陣列傳參
【C++の相關概念】指標陣列陣列指標二維陣列傳參
阿新•來源:網路•發佈:2021-02-05
技術標籤:演算法與資料結構の相關概念
指標陣列和陣列指標
指標陣列:是指一個數組裡面裝著指標,也即指標陣列是一個數組;
int*a[10];
陣列指標:是指一個指向陣列的指標,它其實還是一個指標,只不過是指向陣列而已;
int(*a)[10];//a指向一個列數為10的二維陣列
區分方法:主要看後面的兩個字是什麼(前面是修飾作用),因此指標陣列是陣列,而陣列指標是指標。
二維陣列傳參
形參為二維陣列
宣告
voidfunction(inta[m][n]);//函式宣告
voidfunction(int(&a)[m][n]);//二維陣列的引用宣告
voidfunction(inta[][n]);//不論多少維陣列,第一維(代表行寬)都可省略。
//雖然第一種函式宣告定義了行數,但是實際傳遞的實參長度可以大於m
//例voidfunction(inta[5][10]);可以傳入實參inta[10][10];
//但此時function函式只取a的前5行,而後5行不取
voidfunction(inta[][]);
//但是不能直接省略一二維引數,
//因為從實參傳遞來的是陣列的起始地址,
//在記憶體中按陣列排列規則存放(按行存放),而並不區分行和列,
//如果在形參中不說明列數,則系統無法決定應為多少行多少列
呼叫
function(a);//函式呼叫實參直接寫陣列名!陣列名!(重點)。
//(注意)function(a[m][n])或function(a[][n])都不可以!
在函式操控元素
1.*(a[i]+j)//代表第i行第j列
2. a[i][j] //同上
3.*(*(a+i)+j)//同上
4.*((int*)a+i*n+j)//同上
//n表示第二維陣列長度,即列寬,
//注意這裡(int*)a是不可缺少的
形參為陣列指標
(其實只是宣告定義與第一種不同,其他一樣)宣告
voidfunction(int(*a)[n]);
//不是(int*a[n])(指標陣列),而是(int(*a)[n])(陣列指標);
//緣由是[]的優先順序比*的大
呼叫
function(a);//函式呼叫實參同樣直接寫陣列名!
//(注意)function(a[m][n])或function(a[][n])同樣都不可以!
在函式操控元素
1.*(a[i]+j)//代表第i行第j列
2. a[i][j] //同上
3.*(*(a+i)+j)//同上
4.*((int*)a+i*n+j)//同上
//n表示第二維陣列長度,即列寬,
//注意這裡(int*)a是不可缺少的
形參為二級指標
宣告
voidfunction(int**a,intn);n表示第二維陣列長度,即列寬
呼叫
function((int**)a,intn);//實參不能為陣列名!*與上面相反*!有兩個*!
//(注意)function(a)或function((int*)a)不可以!
在函式操控元素
*((int*)a+i*n+j)
//n表示第二維陣列長度,即列寬,
//注意這裡(int*)a是不可缺少的
也可以使用int(*)[n]強轉a的型別,然後再執行如下的操作:
1.*(a[i]+j)//代表第i行第j列
2. a[i][j] //同上
3.*(*(a+i)+j)//同上
總結
宣告定義(分三種)。
二維陣列,陣列指標,二級指標。
(都是指標)
呼叫陣列指標,二維陣列對應的型別為陣列指標Type(*)[n]二級指標Type**
在函式中操作元素
*(a[i]+j)//代表第i行第j列a[i][j]//同上*(*(a+i)+j)//同上*((int*)a+i*n+j)//同上//n表示第二維陣列長度,即列寬,//注意這裡(int*)a是不可缺少的
注意a可以用靜態陣列和動態陣列宣告
voidfun(intarray[][D]);//case1
voidfun(int(*array)[D]);//case2
voidfun(int**array);//case3
intmain(){
inta[N][D];//靜態陣列宣告
int**A;
A=newint*[N];//Type*A=newType[N];注意:N代表行數,即先確定函式再去頂列數
for(inti=0;i
延伸文章資訊
- 1指標與陣列
在宣告陣列之後,使用到陣列變數時,會取得首元素的位址,例如在下面的程式中將指出,陣列 arr 與 &arr[0] 的值是相同的: #include <stdio.h> int main(void...
- 2第十章指標
為什麼要用指標? ○ 利用指標可以使得函數在傳遞陣列時更有效率. ○ 可隨時改變所指之對向,因而可彈性地. ○ 處理變數. ○ 呼叫不同的函數 int showArray( arr ) {.
- 3副程式如何傳遞二維陣列 - gists · GitHub
不知道為什麼這篇突然在"傳遞二維陣列" 的搜索排top1. 幾年後的我又整理一篇比較詳細的, ... 目的只是想要你想像成你宣告了2個一維陣列(指標). *(arr_1)=arr_1[0];.
- 4從函式回傳陣列指標
int * myFunction() { .... } 陣列位址指標:也就是指到陣列第一個元素位址的指標。如下例子,age[10] 是一個 ...
- 5將陣列(含多維)傳入副函式- CYCU-EE-C
printf(“%d”, A[0] ); 這樣輸出的答案是2,這樣大概了解陣列等於指標的事情了吧! 所以到底該怎麼傳入副程式 ...