[問題] C:PassByAddress,main和子function值不同

看板C_and_CPP作者 (晃~)時間10年前 (2014/02/25 17:06), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev C++ 4.9.9.2 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我寫了一個pass by address的練習 在子function中, 將亂數值設到指標所指的位置 再把指標位置回傳給main, 再輸出設好的值 但問題是, 子function和main所輸出的值, 會有幾組不一樣(應該要是一樣) 餵入的資料(Input): 用rand()寫的亂數 預期的正確結果(Expected Output): 假設輸入3, 結果應該是(舉例) 17 0023FF44 11 0023FF48 20 0023FF4C 17 0023FF44 11 0023FF48 20 0023FF4C 錯誤結果(Wrong Output): 17 0023FF44 11 0023FF48 20 0023FF4C 17 0023FF44 2359112 0023FF48 <---這行的值有問題 20 0023FF4C 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/6DPOrrfO 網頁版 #include<stdio.h> #include<stdlib.h> #include<time.h> #define RAN() srand(time(NULL)) int *number(int input,int fake); int main(void) { int input_number=0,initial=0; printf("input the NO. of random:"); scanf("%d",&input_number); int *kk=number(input_number,initial);; int j=0; for(;j<input_number;j++) printf("%d %p\n",*(kk+j),(kk+j)); system("PAUSE"); } int *number(int input,int initial_PTR) { RAN(); int *bb=&initial_PTR; int i=0; for(;i<input;i++) { *(bb+i)=rand()%20+1; printf("%d %p\n",*(bb+i),(bb+i)); } printf("\n"); return bb; } 補充說明(Supplement): 無 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 42.65.56.150

02/25 17:21, , 1F
呃, 你根本沒有傳任何位址進去啊...
02/25 17:21, 1F

02/25 17:21, , 2F
再說你的 number 裡拿一個區域變數的位址當陣列用
02/25 17:21, 2F

02/25 17:22, , 3F
沒炸算你運氣好 @@
02/25 17:22, 3F

02/25 17:22, , 4F
你必須要自行 malloc 出一個陣列再傳進去才行
02/25 17:22, 4F

02/25 17:35, , 5F
感謝樓上 了解!
02/25 17:35, 5F

02/25 18:41, , 6F
到底是什麼書在教 pass by address 啊...
02/25 18:41, 6F
文章代碼(AID): #1J35qns5 (C_and_CPP)