C語言二維陣列與指標assing初始值疑問? |
答題得分者是:liangnet
|
speed
一般會員 發表:13 回覆:17 積分:6 註冊:2003-04-30 發送簡訊給我 |
請教各位大大:
寫影像程式發生的疑問?
在C語言中 二維陣列與指標
char str[3][6]={"HOW","ARE","YOU"};寫法可改成指標宣告 char *pstr[3]={"HOW","ARE","YOU"};但是 int A[2][3]={{10,20,30},{40,50,60}}; int *pA[2]={{10,20,30},{40,50,60}};這一定會compile error啦!我想請問各位大大 我想以一個指標的指標進行原本的整數二維陣列初始化動作 達到 *pA = &A[0][0]; //A[0][0]的位址 *pA 2= &A[0][2]; //A[0][2]的位址 *(*(pA 1) 2) = A[1][2] = 陣列值60;這樣的初始值assign動作要該如何寫呢?? 謝謝各位^^ 發表人 - speed 於 2004/04/05 14:50:07 發表人 - speed 於 2004/04/05 14:53:57 |
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
引言: 請教各位大大: 寫影像程式發生的疑問? 在C語言中 二維陣列與指標 char str[3][6]={"HOW","ARE","YOU"}; 寫法可改成指標宣告 char *pstr[3]={"HOW","ARE","YOU"}; 因為是字串,所以Compile會自動配置記憶體空間來存放字串。 但是 int A[2][3]={{10,20,30},{40,50,60}}; int *pA[2]={{10,20,30},{40,50,60}};這一定會compile error啦! 這當然不會過的,因為你是定義指標而已,並不會在記憶體配置一個空間來存放此資料。 int *p; *p = 5; <==這樣做法是錯誤的,因為你未配置一個記憶體空間給他,就給他一個值。 我想請問各位大大 我想以一個指標的指標進行原本的整數二維陣列初始化動作 達到 *pA = &A[0][0]; //A[0][0]的位址 *pA 2= &A[0][2]; //A[0][2]的位址 *的優先權好像比 高哦,所以要這樣寫 *(pA 2) *(*(pA 1) 2) = A[1][2] = 陣列值60; 這樣的初始值assign動作要該如何寫呢?? 謝謝各位^^ 應該要這樣寫最後希望你能再回頭好好的看一下基本的指標觀念的書! 發表人 - liangnet 於 2004/04/05 09:05:36 發表人 - liangnet 於 2004/04/05 09:06:33int A[2][3]={{10,20,30},{40,50,60}}; int *pA[2]; for (int i = 0; i < 2; i ) { pA[i] = new int[3]; //配置3個int的記憶體空間 for (int j = 0; j < 3; j ) pA[i][j] = A[i][j]; //設定初值 } |
speed
一般會員 發表:13 回覆:17 積分:6 註冊:2003-04-30 發送簡訊給我 |
感謝各位大大 我測試的結果
歸納出
*(pA 1)=> &A[1][0]; *pA 2=> &A[0][2]; *(pA 2)=> &A[2][0]; *(pA 1) 2=>&A[1][2];之前大大以非連續記憶體方式建構二維陣列 分享小弟看書上的另一種寫法 以連續記憶體方式 建構二維陣列 const int m=2,n=3; int **pA=new int *[m]; pA[0]=new int[m*n]; for (int i=1;i |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
假設陣列的維度是固定2x3, 下面的方式供參考
int A[2][3]={{1,2,3},{4,5,6}}; int (*P)[3] = A; Memo1->Lines->Add(*(*P)); //1 Memo1->Lines->Add(P[0][1]); //2 Memo1->Lines->Add(P[0][2]); //3 Memo1->Lines->Add(P[1][0]); //4 Memo1->Lines->Add(P[1][1]); //5 Memo1->Lines->Add(*(*(P 1) 2)); //6若不是固定請用liangnet前輩的方式 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> |
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
引言: 感謝各位大大 我測試的結果 歸納出*(pA 1)=> &A[1][0]; *pA 2=> &A[0][2]; 這一行有問題哦 *pA 2 應該是pA指到的位址的內容 2,而非位址 2 正確寫法應該是*(pA 2) 這樣才是指到 A[0][2] *(pA 2)=> &A[2][0]; *(pA 1) 2=>&A[1][2];之前大大以非連續記憶體方式建構二維陣列 分享小弟看書上的另一種寫法 以連續記憶體方式 建構二維陣列const int m=2,n=3; int **pA=new int *[m]; pA[0]=new int[m*n]; for (int i=1;i |
speed
一般會員 發表:13 回覆:17 積分:6 註冊:2003-04-30 發送簡訊給我 |
引言:前輩您好 非常感謝您花時間幫我解答 可是我的測試程式碼如下~引言: 感謝各位大大 我測試的結果 歸納出*(pA 1)=> &A[1][0]; *pA 2=> &A[0][2]; 這一行有問題哦 *pA 2 應該是pA指到的位址的內容 2,而非位址 2 正確寫法應該是*(pA 2) 這樣才是指到 A[0][2] *(pA 2)=> &A[2][0]; *(pA 1) 2=>&A[1][2];之前大大以非連續記憶體方式建構二維陣列 分享小弟看書上的另一種寫法 以連續記憶體方式 建構二維陣列const int m=2,n=3; int **pA=new int *[m]; pA[0]=new int[m*n]; for (int i=1;i int main(int argc, char* argv[]) { int A[3][3]={{10,20,30},{40,50,60},{70,80,90}}; int *pA[3]; for (int i = 0; i < 3; i ) { pA[i] = new int[3]; //配置3個int的記憶體空間 for (int j = 0; j < 3; j ) pA[i][j] = A[i][j]; //設定初值 } cout<<*pA ; //&A[0][0] cout< |
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
|
speed
一般會員 發表:13 回覆:17 積分:6 註冊:2003-04-30 發送簡訊給我 |
|
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
|
liangnet
中階會員 發表:19 回覆:148 積分:83 註冊:2004-01-03 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |