線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2727
推到 Plurk!
推到 Facebook!

請問動態矩陣問題

答題得分者是:syntax
thumbhero
一般會員


發表:2
回覆:1
積分:0
註冊:2007-10-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-06 02:15:47 IP:140.112.xxx.xxx 訂閱
請問一下,我想寫一函式來作兩個矩陣的捲積,以下是我的部分程式:

[code cpp]
int smfter3[3][3] = {1,1,1,1,1,1,1,1,1};

int **maskBuff;
maskBuff = new int*[m_h]; //動態new一個maskBuff , 大小取決於讀入檔案大小
for(int i=0; i<=m_w; i )
maskImg[i] = new int[m_w];

[/code]

以下部分作捲積, 於外部呼叫函式
[code cpp]
for(int i=0; i<=bmp3->Width; i )
for(int j=0; j<=bmp3->Height; j )
maskImg[i][j] = CONVOL(smfter3,maskBuff,i,j,m_choice); //這行會有error
[/code]

外部函式:
[code cpp]
int TForm1::CONVOL(int** mask, int** img, int a, int b, int m_ch)
{
int R=0;
for(int i=0; i<=m_ch*2 1; i )
{
for(int j=0; j<=m_ch*2 1; j )
{
R = R img[a m_ch][b m_ch]*mask[i][j];
if(R>255) R=255;
if(R<0) R=0;
}
}
return R;
}
[/code]

但是compile 會出現error, error msg如下:
[C Error] Unit1.cpp(388): E2034 Cannot convert 'int ( *)[3]' to 'int * *'
[C Error] Unit1.cpp(388): E2342 Type mismatch in parameter 'mask' (wanted 'int * *', got 'int ( *)[3]')

想請問是為什麼呢? 謝謝回答!!
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-06 23:33:49 IP:61.64.xxx.xxx 訂閱
給你幾個思考的方向

1.
int *Array_A
Array_A = new int *[5];

然後 Array_A[2] 是什麼?*Array_A[2] 又是什麼

2.
int *Array_A;
int **Array_B;

Array_A[] = new int *[5]
for yyyyy Array_A[] or ArrayB[] = new int *[5]

又差在哪裡?

Array_A[] or ArrayB[] = new int *[25] 又有何差異?

Array_A[] or ArrayB[] = new int *[30] 又有何差異?

3.

maskImg[i] = new int[m_w];

maskImg[i] = new int *[m_w];

又各代表哪種意思?

4.
最後
int smfter3[3][3] = {1,1,1,1,1,1,1,1,1};

smfter3 可以直接傳給 int** mask ?
還是要(int**) &
smfter3 或 (int **) &smfter3[0] ?

5.
struct ...略
int p1;
int *p2;
... 略 k

k *sK;
k gk;

a.
sK->p1 與 *sK.p1 與 *sK->p1 與 sK.p1 哪些對?哪些稍做修正,就會對,哪些怎麼修都不對?
b.
gK->p1 與 *gK.p1 與 *gK->p1 與 gK.p1 哪些對?哪些稍做修正,就會對,哪些怎麼修都不對?
c.
sK->p2 與 *sK.p2 與 *sK->p2 與 sK.p2 哪些對?哪些稍做修正,就會對,哪些怎麼修都不對?
d.
gK->p2 與 *gK.p2 與 *gK->p2 與 gK.p2 哪些對?哪些稍做修正,就會對,哪些怎麼修都不對?




以上能釐清,以後,你使用指標,一定游刃有餘


===================引 用 thumbhero 文 章===================
請問一下,我想寫一函式來作兩個矩陣的捲積,以下是我的部分程式:

[code cpp]
int smfter3[3][3] = {1,1,1,1,1,1,1,1,1};

int **maskBuff;
maskBuff = new int*[m_h]; //動態new一個maskBuff , 大小取決於讀入檔案大小
for(int i=0; i<=m_w; i )
maskImg[i] = new int[m_w];

[/code]

以下部分作捲積, 於外部呼叫函式
[code cpp]
for(int i=0; i<=bmp3->Width; i )
for(int j=0; j<=bmp3->Height; j )
maskImg[i][j] = CONVOL(smfter3,maskBuff,i,j,m_choice); //這行會有error
[/code]

外部函式:
[code cpp]
int TForm1::CONVOL(int** mask, int** img, int a, int b, int m_ch)
{
int R=0;
for(int i=0; i<=m_ch*2 1; i )
{
for(int j=0; j<=m_ch*2 1; j )
{
R = R img[a m_ch][b m_ch]*mask[i][j];
if(R>255) R=255;
if(R<0) R=0;
}
}
return R;
}
[/code]

但是compile 會出現error, error msg如下:
[C Error] Unit1.cpp(388): E2034 Cannot convert 'int ( *)[3]' to 'int * *'
[C Error] Unit1.cpp(388): E2342 Type mismatch in parameter 'mask' (wanted 'int * *', got 'int ( *)[3]')

想請問是為什麼呢? 謝謝回答!!
編輯記錄
syntax 重新編輯於 2007-11-06 23:37:57, 註解 無‧
jenwe
一般會員


發表:34
回覆:38
積分:24
註冊:2007-03-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-07 16:28:06 IP:140.118.xxx.xxx 訂閱
好深的指標概念

我想我也不大熟指標~我也來想想了...
jenwe
一般會員


發表:34
回覆:38
積分:24
註冊:2007-03-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-08 15:30:55 IP:140.118.xxx.xxx 訂閱
大大可否可以做個解答~小弟很想知道這幾個問題的詳細概念。
thumbhero
一般會員


發表:2
回覆:1
積分:0
註冊:2007-10-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-11-11 19:12:28 IP:123.193.xxx.xxx 訂閱
感謝提醒,
maskImg為動態指定矩陣,
smfter是一般二維矩陣,
欲從後者填值進前者,應利用後者址的部分進行變數轉換成二維動態指標。
系統時間:2024-05-07 23:48:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!