【C++の相關概念】指標陣列陣列指標二維陣列傳參 - 程式人生

文章推薦指數: 80 %
投票人數:10人

技術標籤:演算法與資料結構の相關概念指標陣列和陣列指標指標陣列:是指一個 ... 但是不能直接省略一二維引數, //因為從實參傳遞來的是陣列的起始 ... 程式人生>實用技巧>其它>【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



請為這篇文章評分?