函式傳回陣列,使用指標。 |
答題得分者是:justdo
|
hofgk
一般會員 ![]() ![]() 發表:1 回覆:1 積分:0 註冊:2005-01-05 發送簡訊給我 |
各位好:
我寫了一個外部的函式,這函式最後會回傳一個一維陣列(兩個變數)的指標給呼叫者。
但是我要看這個陣列的內容時,卻只能看到第一個值,而第二個卻是零。
以下是我的程式碼: 這是Unit.cpp中的呼叫者:
long double *tmp; tmp = Cart2Ang(Edit1->Text.ToDouble(),Edit2->Text.ToDouble(),ARM_BTM,ARM_UPR); Memo1->Lines->Add(FloatToStrF(*tmp,ffFixed,18,18)); Memo1->Lines->Add(FloatToStrF(*(tmp 1),ffFixed,18,18));這是我另外寫的函式,並include到Unit.cpp中: long double* __fastcall Cart2Ang(.......){ long double arc_cosine_ARM_UPR[2]; : : : : return arc_cosine_ARM_UPR; }我用debug來看變數的值,都只能看到tmp指抓到第一個值,而第二個值就消失了。 謝謝! 發表人 - hofgk 於 2005/01/05 15:02:45 |
smartboss
初階會員 ![]() ![]() 發表:19 回覆:93 積分:42 註冊:2004-12-29 發送簡訊給我 |
引言: 各位好: 我寫了一個外部的函式,這函式最後會回傳一個一維陣列(兩個變數)的指標給呼叫者。 但是我要看這個陣列的內容時,卻只能看到第一個值,而第二個卻是零。 以下是我的程式碼: 這是Unit.cpp中的呼叫者:您好,依小弟之見,您傳回的應該不是第一個值,而是那個陣列的位址,且當您的程式離開了那個func 之後,陣列的值就算是不存在了,當程式又進到裡面時那個陣列算是重新被配置過了,小弟董的不多依小弟我會這麼做: long double arc_cosine_ARM_UPR[2]; 將陣列做成全域 long double* __fastcall Cart2Ang(.......) { } 或者在裡,做一個copy 的動作,但是原則上您還是要有全域的陣列來收。 long double Arry[2]; long double* __fastcall Cart2Ang(.......) { memcpy(Arry,arc_cosine_ARM_UPR,2); }long double *tmp; tmp = Cart2Ang(Edit1->Text.ToDouble(),Edit2->Text.ToDouble(),ARM_BTM,ARM_UPR); Memo1->Lines->Add(FloatToStrF(*tmp,ffFixed,18,18)); Memo1->Lines->Add(FloatToStrF(*(tmp 1),ffFixed,18,18));這是我另外寫的函式,並include到Unit.cpp中:long double* __fastcall Cart2Ang(.......){ long double arc_cosine_ARM_UPR[2]; : : : : return arc_cosine_ARM_UPR; }我用debug來看變數的值,都只能看到tmp指抓到第一個值,而第二個值就消失了。 謝謝! |
hofgk
一般會員 ![]() ![]() 發表:1 回覆:1 積分:0 註冊:2005-01-05 發送簡訊給我 |
引言: 您好,依小弟之見,您傳回的應該不是第一個值,而是那個陣列的位址,且當您的程式離開了那個func 之後,陣列的值就算是不存在了,當程式又進到裡面時那個陣列算是重新被配置過了,小弟董的不多依小弟我會這麼做: long double arc_cosine_ARM_UPR[2]; 將陣列做成全域 long double* __fastcall Cart2Ang(.......) { } 或者在裡,做一個copy 的動作,但是原則上您還是要有全域的陣列來收。 long double Arry[2]; long double* __fastcall Cart2Ang(.......) { memcpy(Arry,arc_cosine_ARM_UPR,2); }所以由Function產生的陣列,離開Function以後就會消失,是這樣嗎? 也就是說要讓Function處理函式,就一定得用傳址呼叫,或是複製一份並傳回去,而不能僅僅傳回一個陣列的開頭位址即可? 謝謝!! |
justdo
高階會員 ![]() ![]() ![]() ![]() 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |