請問 array 的members 如何傳址不傳值?(表達不太好) |
尚未結案
|
kmp
一般會員 發表:17 回覆:51 積分:13 註冊:2004-07-24 發送簡訊給我 |
hi~各位大人:
您們好
我有一 class="code">
int main(int argc, char* argv[])
{
int M[n*n]={1,3,16,14,13,15,2,4,8,6,11,9,12,10,5,7} ; print_M(M); // orig
void flip_v(int M,int out);
print_M(M);//那function(在下)是想像某種風吹"M[0]~[15],
使得上面的數值某一行或列交換,但這裡印出來,
其實是和第一個PRINT一樣的,我不知是我語法或那裡有錯,請指教>>
|
nlj859
資深會員 發表:139 回覆:375 積分:322 註冊:2004-03-20 發送簡訊給我 |
Hello kmp, 請參考底下程式碼:
因為不太曉得你的
*out =*(M i (n-j-1)*n);是做什麼的,所以就暫時先隨便假設變換M裡面的值. 不曉得這樣對你是否有幫助? #include發表人 - nlj859 於 2004/09/28 17:39:38 |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
kmp
一般會員 發表:17 回覆:51 積分:13 註冊:2004-07-24 發送簡訊給我 |
hi~nlj859 您好
很高興謝謝您的講解,>< face="Verdana, Arial, Helvetica">引言:
Hello kmp, 請參考底下程式碼:
因為不太曉得你的
*out =*(M i (n-j-1)*n);是做什麼的,所以就 j= n-j-1 若是j原本控制row的變數, 那表示第一列與最後一列值交換,另外行同理 ex:(有旋轉90,180,270,..這是一例水平鏡射) 1,3,16,14, 13,15,2,4, 8,6,11,9, 12,10,5,7 transform 14,16,3,1 4,2,15,13, 9,11,6,8, 7,5,10,12, 暫時先隨便假設變換M裡面的值. 不曉得這樣對你是否有幫助? excuse,我的表達能力不太好,我原本想說大風吹,雖然您的 副程式有實際指到那值,而且加一常數可證明,但是我是要換位置, 這其實是舉一反三的事,但我還不知是那裡出了問題,可以麻煩請您 看一下我的拙作,謝謝 #include "stdio.h" void print_M(int *M); void flip_v(int *M); #pragma argsused int main(int argc, char* argv[]) { int M[n*n]={1,3,16,14,13,15,2,4,8,6,11,9,12,10,5,7} ; print_M(M); // orig void flip_v(int M); print_M(M); getchar(); } void flip_v(int *M) { int i,j; for(i=0;i |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
kmp:妳的發問主題是array 的members 如何傳址不傳值
我就是只告訴妳這樣處理可能不會錯。因為每個人有自我
的邏輯跟程式撰寫風格!
按妳的要求修正一下:以下為我測試程式!
.h檔 private: // User declarations void __fastcall flip_v(int *M,int *out); .cpp檔 #define n 4 void __fastcall TForm1::Button1Click(TObject *Sender) { Memo1->Clear(); // 顯示M[] Memo2->Clear(); // 顯示out[] int M[n*n]={1,3,16,14,13,15,2,4,8,6,11,9,12,10,5,7} ; // 先宣告out int *out; out=new int[n*n]; // 顯示M[] for (int i=0 ; i < n*n; i ) Memo1->Lines->Add(IntToStr(M[i])); flip_v(M,out); // 顯示out[] for (int i=0 ; i < n*n; i ) Memo2->Lines->Add(IntToStr(out[i])); } j= n-j-1 若是j原本控制row的變數, 那表示第一列與最後一列值交換,另外行同理 ex:(有旋轉90,180,270,..這是一例水平鏡射) 1,3,16,14, 13,15,2,4, 8,6,11,9, 12,10,5,7 transform 14,16,3,1 4,2,15,13, 9,11,6,8, 7,5,10,12, void __fastcall TForm1::flip_v(int *M,int *out) { int r=0; for(int j=0;j < n; j ) { for(int i=0;i < n; i ) { out[r ]=*(M j*n (n-i-1)); } } } 請參考!Andy Chang
------
Andy Chang |
kmp
一般會員 發表:17 回覆:51 積分:13 註冊:2004-07-24 發送簡訊給我 |
Hello nlj859:
大人您好
我覺很抱歉也很謝謝您o hi~andychang1690:
大人您好,很感謝您的指點o
因為我之前是作較低階的,好像C++最近才開始,BCB是
我第一次用的C++軟體,可能我不夠聰明反應不快,以下還有一點小問題o
引言:Best Regard kmp 發表人 - kmp 於 2004/09/30 20:42:48.h檔 private: // User declarations void __fastcall flip_v(int *M,int *out); 我從來沒用過這物件導向的東西,我是後來改成function is ok, 但我使用此有如下error: 請教! [C Error] Unit1.h(24): E2040 Declaration terminated incorrectly [C Error] Unit1.cpp(31): E2268 Call to undefined function 'flip_v' [C Error] Unit1.cpp(40): E2316 '_fastcall TForm1::flip_v(int *,int *)' is not a member of 'TForm1' .cpp檔 #define n 4 void __fastcall TForm1::Button1Click(TObject *Sender) { Memo1->Clear(); // 顯示M[] Memo2->Clear(); // 顯示out[] int M[n*n]={1,3,16,14,13,15,2,4,8,6,11,9,12,10,5,7} ; // 先宣告out int *out; out=new int[n*n]; // 顯示M[] for (int i=0 ; i < n*n; i ) Memo1->Lines->Add(IntToStr(M[i])); flip_v(M,out); // 顯示out[] /*因為我call兩不同function,用同樣的function print,我在想,是這樣的關西嗎? int M[n*n]={1,3,16,14,13,15,2,4,8,6,11,9,12,10,5,7} ; print_M(M); // orig void flip_v(int M); print_M(M); */ //我剛翻一下,我現有的書,可是我找不到,我有查help,IntToStr (); //請問如果不知有什元件可用,如此,要如何增加這方面? for (int i=0 ; i < n*n; i ) Memo2->Lines->Add(IntToStr(out[i])); }Andy Chang |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
kmp
一般會員 發表:17 回覆:51 積分:13 註冊:2004-07-24 發送簡訊給我 |
hi~andychang1690:
前輩您好, 回訊晚了請見諒(身體有點不舒服),非常感謝您的講解教導o 因為我第二工作才是我第一次coding,是寫driver,as a firmware engineer,
我們都是在Ultra Edit 寫程式,下一些指令到Linux server 去compiler,
之後我去考研究所,沒考上再去一家也是firmware,所以我都會跟硬體有些關
西,因為我是電子系畢業的,我第一次用這種套裝環境,像BCB,在今暑假o 我的精神是不管語法對不對,就是要能動,可是通常像以前那樣,是要花很大的
effort,可是得到的卻是不進反而退般,因為我覺要對ANSI C/C 有好的基楚,
我沒有,所以雖然您說"我看起來沒寫過BCB",好像是知人知明,可是不只是這樣
,是連ANSI C/C 這底子都很弱, 您可能沒發現... > 我很懷念研發工作是"看不完的 > 還有, 我>>
>
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
其實。妳的問題應該是
在 main() 這個函數中的
int M[n*n]={1,3,16,14,13,15,2,4,8,6,11,9,12,10,5,7} ;
這個陣列。
要在 void flip_v(...)
這個函數中去修改它的內容吧。 如果是這樣的話。
急的方法:
把 int M[n*n]={1,3,16,14,13,15,2,4,8,6,11,9,12,10,5,7} ; 變成公用變數
就是提到 main() 的上面去。這樣就不用傳了。^_^ 慢的方法:
寫個範例妳測看看。
//test.cpp
#include
|
kmp
一般會員 發表:17 回覆:51 積分:13 註冊:2004-07-24 發送簡訊給我 |
hi~暗黑破壞神:
您好,謝謝,sorry,
因為我蒙蔽眼睛,我到現在才看到您回我這問題,
ㄣ,我有去看我原始的問題, 我想請問是不是還有其他方法可以做到,
以您的範例來改:
#include 引言: 寫個範例妳測看看。 //test.cpp #includeBest Regard kmp |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |