1樓:匿名使用者
為什麼很多人都認為二維指標和二維陣列等價呢,我以前學c時沒看到過這話啊.
c語言中陣列名相當於乙個一級指標,比如int a[5];a就等價於int *.
而二維陣列int a[m][n]本質上是長度為m的一維陣列,其陣列元素是長度為n的一維int陣列,因此二維陣列的陣列名就等價於"長度為n的一維陣列型別的指標",即(int *)[n],而不是int **
2樓:匿名使用者
2維陣列實際上是乙個陣列他的每乙個元素都是乙個陣列,是乙個指向bool陣列的指標,與指向bool指標的指標不時一回事。
你可以用乙個陣列的指標(*barr)[4]來代替它,即是乙個指向長度為4的一位陣列的指標,**舉個例子,char**代替char *argv[argc];就是位址的位址。這些是簡單的指標。很多數書都有這麼寫。
3樓:慎燁諾紫薇
陣列名ar只是乙個位址,
*(*(ar+i)+j));
它裡面的
*(ar+i)是取得ar+i位址所對應的值,並非二維陣列合法位址,此值再加j實際上是乙個普通的值,而並非陣列位址,所以才會出錯。
二級指標和二維陣列行指標
4樓:好程式設計師
二維陣列即a[i][j],如a[1][1]是第一行第一列的那個數;指標只是指向了這個數所在的位址,沒有具體指出那個數.他們的區別 乙個是指向具體的數,乙個是執行了該數所在的位址
指向二維陣列的指標
5樓:小舅舅有點帥
int(*p)[10]定義了乙個指向二維陣列的指標p,賦給它10個長度,把a陣列的值賦給(*p)[10]。
注意,這裡是a陣列是5行10列的,放入(*p)[10]是把a[0][0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5],a[0][6],a[0][7],a[0][8],a[0][9]放入(*p)[0]中,同理,將a[1][0...9]放入(*p)[1]。
最後(*p)[10]中的值只有五行被初始化為a陣列的值了。
在本例中,p和p[0]是同乙個意思,就是陣列a的起始位址,等價於cout
#include
#include "iostream"
using std::cout;
using std::endl;
using std::hex;
void main()
int a[5][10]=;
int (*p)[10]=a;
cout 0012feb8 0012feb8 #include #include "iostream" using std::cout; using std::endl; using std::hex; void main() int a[5][10]=; int (*p)[10]=a; cout<<*p 0012feb8 這是p和p[0]的區別就體現出來了。因為*p並不是取首元素的值,它這時才相當於p[0]。那如何通過p取得首元素的值呢,很顯然,應該再加乙個*操作符,如下: cout<<**p<這時輸出結果自然就會和(*p)[0]一樣是1了。 擴充套件資料 設p是指向二維陣列a[m][n]的指標變數,則有: int* p=a[0];//此時p是指向一維陣列的指標。p++後,p指向 a[0][1]。 如果定義int (*p1)[n];p1=a;p1++後,p1指向a[1][0]; 則p+j將指向a[0]陣列中的元素a[0][j]。 由於a[0]、a[1]┅a[m-1]等各個行陣列依次連續儲存,則對於a陣列中的任一元素a[i][j],指標的一般形式如下: p+i*n+j 相應的如果用p1來表示,則為*(p1+i)+j 元素a[i][j]相應的指標表示為: *( p+i*n+j) 相應的如果用p1來表示,則為*(*(p1+i)+j) 同樣,a[i][j]也可使用指標下標法表示,如下: p[i*n+j] 例如:int a[3][4]=,,}; 則陣列a有3個元素,分別為a[0]、a[1]、a[2]。而每個元素都是乙個一維陣列,各包含4個元素,如a[1]的4個元素是a[1][0]、a[1][1]、a[1]2]、a[1][3]。 若有:int *p=a[0]; 則陣列a的元素a[1][2]對應的指標為:p+1*4+2 元素a[1][2]也就可以表示為:*( p+1*4+2) 用下標表示法,a[1][2]表示為:p[1*4+2] 6樓:匿名使用者 一、你的 float score 陣列定義的是:乙個3行、4列的二維浮點陣列,陣列的元素為浮點數。如果你換個格式書寫就清晰了! float score[3][4]=,,}; 在呼叫的過程中,score 就是這個陣列的首位址,指向的是浮點陣列。score + 1 指向的是陣列。 二、你的 float *p 定義的是:乙個指向浮點數的指標。這個是一維的。 在呼叫的過程中,float 指向的是 xx。乙個浮點數字。 兩個的定義不同,所以引數傳遞過程中會出錯。 三、你的 float (*p)[4] 定義的是:乙個指向含有四個元素的浮點陣列的指標。 在呼叫的過程中,float 指向的是,由四個浮點數組成的陣列。 這時兩個定義相同,所以引數傳遞過程中沒有錯誤。 四、有個建議,你的程式書寫格式不清晰,不利於你糾錯和修改,應該盡量的清晰、明確,不建議使用簡化方式定義引數。 作為乙個軟體工作者,應該盡量使程式流暢、格式清晰、易讀,這是乙個軟體工作者最基本的職業素養。 格式化後,程式如下,會清晰很多: #include void main() ,,}; search(score,2); } void search(float (*p)[4],int n)/*這裡的 float *p 好像有問題*/ printf("\n");} 7樓:匿名使用者 p[0]指向陣列a的起始位址 p[9]野指標 q1 為什麼一級指標能指向二級指標?這裡的a不是二級指標。二維陣列的指標不是二級指標。q2 為什麼乙個指向a 0 0 a的指標表示陣列的首位址,也就是a 0 0 的位置。你要根據情況區分它是指向的a還是a,這個程式設計時是不一樣的。q3 為什麼如果輸出的為 t 1 會出錯?因為t是個二級指標,它指向... 看書,千萬不要去上補習班,既花錢,浪費時間,還誤導學生,我今年上半年考的vf,我因為參加辯論賽沒去報班,可是考試完後我成績是89 85,而那些報班的都是剛剛及格,最好的才70多分,他們反映就是考前在補習班裡信心百倍,可到考場才發現準備的與考題差太遠了,所以我建議還是自己看書,隨便看一本教程書,千萬不... 樓主,我想講講二級指標的原理,它是指向記憶體位址的位址,簡單說就是取兩次位址,一維陣列,二維陣列它們的元素都對應擁有乙個暫時分配的記憶體位址,就是說只需要乙個一級指標就可以完成取址,如果你用乙個二級指標去取址是會取到亂值,如果是系統的位址系統就會崩潰 我就是試過用指標把編譯器搞崩潰了 我下面例子說明...問二級指標的小問題,問乙個二級指標的小問題
二級Visual FoxPro,二級visual foxpro為什麼停考
怎麼讓二維指標指向二維陣列,怎麼讓乙個二維指標指向乙個二維陣列