函數的呼叫 |
尚未結案
|
sunnysophia
一般會員 發表:8 回覆:4 積分:2 註冊:2004-11-15 發送簡訊給我 |
|
kuoyung
一般會員 發表:3 回覆:5 積分:1 註冊:2004-11-09 發送簡訊給我 |
這是因為在寫程式時要注意到,函數的設定若為double那麼在main中引用其函數時,也必需為double型態,依你所列的error來看是型態的問題,以下是小弟自己寫的一個程式給你參考看看,希望對你有用,也希望各位大大可以給我指導
#include
|
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
sunnysophia你好~
此錯誤為你企圖要指定一'double *'型態的記憶體位址 傳給副函式的double**
型態變數~故會出錯~~簡略依你的內容寫一下小程式相信你看後即可明瞭~~
#pragma hdrstop #include "stdio.h" //--------------------------------------------------------------------------- #pragma argsused #include發表人 - rogan321 於 2004/12/18 21:51:59 |
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言: 請問 若我寫了一個函數為 void data(double **x) 其中x[50][4] 在main裡 要呼叫此函數 寫成 data(&xj[0][0]); main中的xj陣列就是x陣列 data(&xj[0][0]); 這樣的寫法為什麼不對勒? 編譯時顯示: cannot convert parameter 1 from 'double *' to 'double ** ' 不是非常清楚它的意思 能幫忙解釋一下嗎? 謝謝double** 是指向一個double指標的指標, 而double* 為指向double的指標, 兩者型態不同, 故compiler會秀出錯誤訊息. x[50][4]為一個連續的記憶體區塊, 共分為50個小區塊, 每個小區塊包含4個int. &x[0][0] 是取得第一個小區塊的第一個元素的指標, 所以型態為double*. 所以要修正這種錯誤你就要取得一個指向double指標的指標, double* pDouble = &xj[0][0]; // 取得指向第一個小區塊第一個元素的指標 data(&pDouble); // 取得指向第一個小區塊第一個元素的指標的指標 |
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
引言: double* pDouble = &xj[0][0]; // 取得指向第一個小區塊第一個元素的指標 data(&pDouble); // 取得指向第一個小區塊第一個元素的指標的指標data(&pDouble); 上面是傳入local variable pDouble的位置,並不是xj陣列所在。形態正確但是會產生錯誤。 應該用 double** pDouble = (double**)xj; data(pDouble); 發表人 - pwipwi 於 2004/12/19 02:05:26 |
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
引言:pwipwi 大大您好, 您說的我昨天就試過囉, 看起來好像對, 結果是錯的. 我昨晚是用VC++試, 一開始也是用您的方法, 結果出來的結果是Access Violation. 下面是我的碼引言: double* pDouble = &xj[0][0]; // 取得指向第一個小區塊第一個元素的指標 data(&pDouble); // 取得指向第一個小區塊第一個元素的指標的指標data(&pDouble); 上面是傳入local variable pDouble的位置,並不是xj陣列所在。形態正確但是會產生錯誤。 應該用 double** pDouble = (double**)xj; data(pDouble); 發表人 - pwipwi 於 2004/12/19 02:05:26 double TestArray[10][10] = { 1, 2, 3 }; void Test(double** ArrayPointer) { double j = ArrayPointer[0][1]; printf("%f\n\n", j); } int main(int argc, char* argv[]) { double* p = &TestArray[0][0]; double** pDouble = (double**)TestArray; Test(&p); // 這樣呼叫會列印出TestArray[0][1]的值 Test(pDouble); // Access Violation }為什麼double** pDouble = (double**)TestArray; 這樣會錯呢?? 看下這張圖(為了方便觀看, 我把double型態改為int) 其實TestArray本身就是指向Array第一個元素的指標, 但若您強迫轉為指標的指標, 結果就如圖所示, 它的指標的指標值為 1, 1為TestArray[0][0]原本的值, 這樣做當然會錯. 您可以試試 |
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
|
雲中鵝
一般會員 發表:14 回覆:24 積分:7 註冊:2004-12-21 發送簡訊給我 |
引言: sunnysophia你好~ 此錯誤為你企圖要指定一'double *'型態的記憶體位址 傳給副函式的double** 型態變數~故會出錯~~簡略依你的內容寫一下小程式相信你看後即可明瞭~~請問....到底是要如何做到呢?在rogan321的範例中是在開頭已宣告成了 dobule **型態了...但是小弟還是搞不懂要如何傳二維的值進去呢?除了設成 全域變數...及使用動態二維宣告外或是一個一個傳&a[0][]'&a[1][]外...還有其它的方法嗎? 謝謝回答 Try it!#pragma hdrstop #include "stdio.h" //--------------------------------------------------------------------------- #pragma argsused #include發表人 - rogan321 於 2004/12/18 21:51:59
------
Try it! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |