[問題] C++函數回傳指標

看板C_and_CPP (C/C++)作者 (波本)時間12年前 (2014/01/09 19:21), 編輯推噓3(3022)
留言25則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C++ 問題(Question): 我寫了一個回傳一維陣列的副程式,但是再次使用後,第一次回傳的值會有問題 預期結果 兩次輸出應該都會是一樣的值,但是卻改變了 兩次PRINTF都是 X 沒有打錯 但結果卻是Y 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/QQm11hB2 這是可以跑的小程式,跟我自己寫的程式一樣都出現與預期不同的結果 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.31.105

01/09 19:33, , 1F
address of local variable 'result' returned
01/09 19:33, 1F

01/09 19:38, , 2F
可是第一次回傳是正確的阿@@
01/09 19:38, 2F

01/09 19:40, , 3F
壞掉的時鐘一天也會準兩次
01/09 19:40, 3F
我把它用在全域也是一樣的結果耶.. http://codepad.org/QQm11hB2 ※ 編輯: Bourbon 來自: 140.120.31.105 (01/09 19:43)

01/09 20:13, , 4F
不曉得你到底在問甚麼? 我run結果就是
01/09 20:13, 4F

01/09 20:13, , 5F
X=0.400000 0.200000
01/09 20:13, 5F

01/09 20:13, , 6F
你的X跟Y都指向result,你的副程式會改result裡面存的值
01/09 20:13, 6F

01/09 20:13, , 7F
X=1.100000 0.300000
01/09 20:13, 7F

01/09 20:14, , 8F
不然你預期結果是甚麼
01/09 20:14, 8F
預期兩次都是0.4 跟0.2 1.1應該是Y值不是X值吧@@ 但是我只是檢查X值而已卻已經變動了

01/09 20:15, , 9F
你先弄清楚指標吧
01/09 20:15, 9F
嗯!?

01/09 20:16, , 10F
你的TEST return回的是 result[0]的指標位置 不是整個陣列
01/09 20:16, 10F

01/09 20:18, , 11F
你第10、12行是把result[0]的位置存在X、Y,都是同一個陣列
01/09 20:18, 11F
不是把result[0]丟到X[0],result[1]丟到X[1]嗎? 正常result[0]應該沒值吧@@ 我放在result[1]跟result[2]

01/09 20:20, , 12F
所以你兩次都在印同一個陣列,在TEST裡印result就很好懂
01/09 20:20, 12F
我印出來他分別為兩次不一樣的結果(但我認知也同意這兩次不同) result[0]=0 result[1]=0.4 result[2]=0.2 result[0]=0 result[1]=1.1 result[2]=0.3

01/09 20:21, , 13F
result[0]不管有沒有值都是這個陣列的指標位置
01/09 20:21, 13F

01/09 20:21, , 14F
你寫得TEST是針對同一個陣列改內容..
01/09 20:21, 14F

01/09 20:22, , 15F
return result; 這個動作是傳指標位置
01/09 20:22, 15F

01/09 20:23, , 16F
你的X跟Y本身都是指向result這個陣列
01/09 20:23, 16F

01/09 20:23, , 17F
他連指標觀念都沒有你跟他講指標位置怎麼能溝通XD
01/09 20:23, 17F
我很像知道了,所以第二次印X 他指回return 當然是新的return@@摟 是這樣子嗎@@? 那我應該怎樣才能夠保存我第一次的result@@?

01/09 20:25, , 18F
你第二次印X跟Y結果都會一樣,因為這兩個都是result..
01/09 20:25, 18F
恩恩 如果我再跑第三次 TEST(0.1,0.8); XY 就會跑最新的值麻@@


01/09 20:28, , 21F
也許能幫你釐清一些觀念
01/09 20:28, 21F
感謝 我先閱讀第二個,第一個很像怪怪的

01/09 20:29, , 22F
我今天才剛學完指標QQ 要存的話我只會開新陣列再逐項存回..
01/09 20:29, 22F

01/09 20:35, , 23F
第一個哪裡怪? 你覺得怪的地方搞不好就是問題所在阿
01/09 20:35, 23F
不是啦,剛剛第一個開不起來所以怪怪的 不是內容怪怪的... ※ 編輯: Bourbon 來自: 140.120.31.105 (01/09 20:41)

01/10 00:01, , 24F
拿另外一個 array 來存第一次的結果
01/10 00:01, 24F

01/12 13:35, , 25F
房子會變的是主人不是門牌,這樣可理解嗎
01/12 13:35, 25F
文章代碼(AID): #1IpePJbK (C_and_CPP)
文章代碼(AID): #1IpePJbK (C_and_CPP)