[問題] struct 內傳值的問題

看板C_and_CPP (C/C++)作者 (獨立黑色色彩)時間14年前 (2012/06/17 21:57), 編輯推噓1(107)
留言8則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2005 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NO 問題(Question): 給一組LLdouble的struct f1是傳一個變數讓他改 f2是傳一個值出來 但為什麼f1改的值一直不正確? 餵入的資料(Input): No 預期的正確結果(Expected Output): LD f1 1.00000 LD f2 1.00000 錯誤結果(Wrong Output): LD f1 0.00000 LD f2 1.00000 程式碼(Code):(請善用置底文網頁, 記得排版) typedef struct LLdouble{ double numberStr; } LLdouble; //以下這個函數不能工作 void f1(double a2,LLdouble a1){ //這裡printf(a1)為 0 a1.numberStr=a2; //這裡printf(a1)為 0 } //這個函數是可以工作的 LLdouble f2(double a2){ LLdouble a1; //這裡printf(a1)為 0 (運氣?) a1.numberStr=a2; //這裡printf(a1)為 1.00000 return a1; } //main void main() { LLdouble LD; f1(1.0,LD); printf("LD f1 %f \n",LD.numberStr);//這裡出現0應該要出現1的 LD=f2(1.0); printf("LD f2 %f \n",LD.numberStr); system("pause");/*暫停功能*/ } 結果: LD f1 0.00000 LD f2 1.00000 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.63.132

06/17 22:01, , 1F
你在每個地方都把 a1 的位址印出來看看
06/17 22:01, 1F
加上去了

06/17 22:01, , 2F
還有把你呼叫時傳給他的引數位址
06/17 22:01, 2F
l大 不好意思 這句我有看沒有懂= = ※ 編輯: wope 來自: 140.112.63.132 (06/17 22:07)

06/17 22:13, , 3F
假如這樣寫: LLdouble a2; f1(a2); a2 的位址跟 a1 是
06/17 22:13, 3F

06/17 22:14, , 4F
不同的, 因為這個呼叫產生出一個複製品 a1, 如果要作
06/17 22:14, 4F

06/17 22:15, , 5F
修改要傳位址進去, f1 再對指標指到的變數作修改
06/17 22:15, 5F
感謝love大提供方向 不過想跟love大再確定看看這想做是否正確 我這樣作是不是直對記憶體的值做修改? //以下這個函數目前跑出來的值是這確的 void f1(double a2,LLdouble &a1){ //這裡printf(a1)為 0 a1.numberStr=a2; //這裡printf(a1)為 1.00000 } 不知道這樣寫是不是合法的寫法? ※ 編輯: wope 來自: 140.112.63.132 (06/17 22:26)

06/17 22:28, , 6F
如果合法 我就有一堆要改了 = = 不過這也是另一個收獲
06/17 22:28, 6F

06/17 22:33, , 7F
c++ 才可這麼寫。
06/17 22:33, 7F

06/26 11:06, , 8F
有&是指標=Call by ref, 無&是變數= Call by value
06/26 11:06, 8F
文章代碼(AID): #1FtU8sY4 (C_and_CPP)
文章代碼(AID): #1FtU8sY4 (C_and_CPP)