全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1474
推到 Plurk!
推到 Facebook!

C語言二維陣列與指標assing初始值疑問?

答題得分者是:liangnet
speed
一般會員


發表:13
回覆:17
積分:6
註冊:2003-04-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-05 01:08:05 IP:61.230.xxx.xxx 未訂閱
請教各位大大: 寫影像程式發生的疑問? 在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-05 09:04:29 IP:218.163.xxx.xxx 未訂閱
引言: 請教各位大大: 寫影像程式發生的疑問? 在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動作要該如何寫呢?? 謝謝各位^^ 應該要這樣寫
int 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];  //設定初值
}
最後希望你能再回頭好好的看一下基本的指標觀念的書! 發表人 - liangnet 於 2004/04/05 09:05:36 發表人 - liangnet 於 2004/04/05 09:06:33
speed
一般會員


發表:13
回覆:17
積分:6
註冊:2003-04-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-05 15:43:10 IP:61.230.xxx.xxx 未訂閱
感謝各位大大    我測試的結果 歸納出
*(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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-05 16:27:32 IP:140.135.xxx.xxx 未訂閱
假設陣列的維度是固定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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-05 17:09:52 IP:218.163.xxx.xxx 未訂閱
引言: 感謝各位大大 我測試的結果 歸納出
*(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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-05 17:58:07 IP:61.230.xxx.xxx 未訂閱
引言:
引言: 感謝各位大大 我測試的結果 歸納出
*(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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-06 09:00:14 IP:218.163.xxx.xxx 未訂閱
是我誤會了你的意思! *pA 2 == &A[0][2] 的位址是沒錯。如果要存取其內容就是*(*pA 2).
speed
一般會員


發表:13
回覆:17
積分:6
註冊:2003-04-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-06 11:52:14 IP:61.230.xxx.xxx 未訂閱
引言: 是我誤會了你的意思! *pA 2 == &A[0][2] 的位址是沒錯。如果要存取其內容就是*(*pA 2).
沒關係啦 非常謝謝您的回應
hornacek
一般會員


發表:29
回覆:76
積分:21
註冊:2004-02-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-04-08 08:55:56 IP:61.57.xxx.xxx 未訂閱
引言:
const int m=2,n=3;    int **pA=new int *[m];      pA[0]=new int[m*n];    for (int i=1;i 
請問一下,這樣的配置方式有什麼好處呢?
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-04-08 11:42:46 IP:218.163.xxx.xxx 未訂閱
引言:
引言:
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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-04-08 15:35:48 IP:140.135.xxx.xxx 未訂閱
引言: 請問一下,這樣的配置方式有什麼好處呢? 我想只有讓別人閱讀你的程式時加上難度… 能用簡單的方式表示就用簡單的方式。
小弟認為有差耶請參考下連結 < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46214">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=46214 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~
系統時間:2024-05-18 12:43:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!