看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《dendrobium (石斛蘭)》之銘言: : 遇到的問題: (題意請描述清楚) : 大家好,我想問一題考古題 : 題目是 中正資工95年 程式設計 第17題 題目為 : Define a C structure type Complex that represents complex numbers and a C : function multiply that performs the multiplication of complex numbers. The : prototype of the multiply is as follows: : Complex *multiply(Complex*, Complex*) : 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) : 純C : 有問題的地方: (請善用置底文標色功能) : 我的在於題目的prototype已經定好了 : 所以multiply必須回傳一個Complex* : 可是回傳一個malloc出來的位置又是不好的習慣 : 回傳static 的位置又會有重複call這個function的問題 : ( 像是 multiply(multiply(A,B),C) 這種 ) : 想請問一下有沒有好的寫法可以回傳一個Complex空間又沒有以上的問題 : 補充說明: : 我的code : typedef struct complex{ : int real,imag; : }Complex; : Complex *multiply( Complex *A, Complex *B) : { : Complex *C = ??? //<= 問題點 : C->Real = .... : C->Imag = .... : return C; : } : 抱歉我的pcmanx對於複製有控制碼東西會怪怪的 : 所以就不上色了 Complex* multiply( Complex *pl, Complex *pr){ static Complex res; Complex temp; temp.real = (pl->real)*(pr->real)-(pl->imag)*(pr->imag); temp.imag = (pl->real)*(pr->imag)+(pl->imag)*(pr->real); memcpy( &res,&temp,sizeof(res) ); return &res; } 這樣可以嗎? -------------------------------------------------------- 其實這個問題滿好玩的 可能要用 linked list 每次傳進來的兩個parameters 都檢查是不是在linked list裡面 如果有出現了 那就再 alloc再接上去 一直到 multiply 結束 client 可以call end_of_FxxK_multiply() 來free list 不過應該有神人 可以用 遞迴+stack 方式解吧? (LL 下面有人推文了 我拿上來用 thx~ ) -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.115.74
softwind:用 local stack variable 充當 額外的空間... 11/10 01:53
VictorTom:函數被呼叫兩次分別存回兩個指標變數時就....XD 11/10 01:54
softwind:也對 這樣只能解 m(m(A,B),C) 這一種 11/10 01:58
tingyushyu:typedef struct complex{ 11/10 02:02
tingyushyu: int real,imag; 11/10 02:02
tingyushyu: struct complex *myself; 11/10 02:02
tingyushyu:} 11/10 02:02
tingyushyu:Complex; 11/10 02:03
※ 編輯: softwind 來自: 118.166.115.74 (11/10 02:08)
tingyushyu:這樣free(A.myself);就可以free到A了 11/10 02:03
tingyushyu:myself指向這個struct的位址 11/10 02:04
tingyushyu:囧..free(A->myself); 抱歉打錯 11/10 02:05