[問題]請問傳遞陣列到函式如何不改變main的值

看板C_and_CPP作者 (我的雞巴女友)時間7年前 (2018/09/08 12:29), 編輯推噓3(305)
留言8則, 3人參與, 7年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...)Ubntun 編譯器(Ex: GCC, clang, VC++...) Linux Codelite 請問各位~~~ 我想要傳遞一個簡單的陣列到副程式,在副程式裡面做簡單的 運算之後又不想改變原本main的呼叫端的陣列~~~該怎麼做 0 1 2 3 4 5 6 7 8 9 //原本main()的陣列內容 0 1 2 3 4 999 6 7 8 9 //把陣列傳入函式之後的內容 0 1 2 3 4 999 6 7 8 9 //在main()裡面再一次列印陣列內容 Press ENTER to continue... 發現呼叫函式之後,main的陣列也被改變了,我該怎麼解決這個 問題呢???? #include <stdio.h> #include <stdlib.h> #include <string.h> void arraytest1(int num[]) { num[5]=999; for(int i=0;i<10;i++) { printf("%d ",num[i]); } } int main(int argc, char **argv) { int num[10]={0,1,2,3,4,5,6,7,8,9}; for(int i=0;i<10;i++) { printf("%d ",num[i]); } printf("\n"); arraytest1(num); printf("\n"); for(int i=0;i<10;i++) { printf("%d ",num[i]); } printf("\n"); return 0; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.98.247 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1536380989.A.3E6.html

09/08 12:34, 7年前 , 1F
簡單的解法就你從頭跑一遍陣列複製一份
09/08 12:34, 1F

09/08 13:36, 7年前 , 2F
嚴謹做法:函式內複製一份陣列來使用(同上)
09/08 13:36, 2F

09/08 13:38, 7年前 , 3F
追求效率:離開函式前把陣列內容改回來
09/08 13:38, 3F

09/08 13:42, 7年前 , 4F
然而可讀性跟架構維護比效率重要
09/08 13:42, 4F

09/09 01:09, 7年前 , 5F
複製真的最簡單最直接 不要追求太炫砲的方法
09/09 01:09, 5F

09/09 01:10, 7年前 , 6F
如果你的程式行為只是要輸出特定形式的資料 也根本不
09/09 01:10, 6F

09/09 01:10, 7年前 , 7F
用改到原始的資料
09/09 01:10, 7F

09/09 01:12, 7年前 , 8F
害怕複製成本太高 每次buffer分批複製或當下計算即可
09/09 01:12, 8F
文章代碼(AID): #1Rar0zFc (C_and_CPP)