副程式如何傳遞二維陣列 - gists · GitHub

文章推薦指數: 80 %
投票人數:10人

不知道為什麼這篇突然在"傳遞二維陣列" 的搜索排top1. 幾年後的我又整理一篇比較詳細的, ... 目的只是想要你想像成你宣告了2個一維陣列(指標). *(arr_1)=arr_1[0];. Skiptocontent Allgists BacktoGitHub Signin Signup Sign in Sign up {{message}} Instantlysharecode,notes,andsnippets. hunandy14/fun_twodim.c LastactiveMay18,2021 Star 1 Fork 0 Star Code Revisions 3 Stars 1 Embed Whatwouldyouliketodo? Embed Embedthisgistinyourwebsite. Share Copysharablelinkforthisgist. Clonevia HTTPS ClonewithGitorcheckoutwithSVNusingtherepository’swebaddress. LearnmoreaboutcloneURLs DownloadZIP 副程式如何傳遞二維陣列 Raw fun_twodim.c ThisfilecontainsbidirectionalUnicodetextthatmaybeinterpretedorcompileddifferentlythanwhatappearsbelow.Toreview,openthefileinaneditorthatrevealshiddenUnicodecharacters. LearnmoreaboutbidirectionalUnicodecharacters Showhiddencharacters /********************************************************** Name:副程式如何傳遞二維陣列 Date:2016/05/26 By:CharlotteHonG Final:2016/05/26 2021/4/18作者留言 不知道為什麼這篇突然在"傳遞二維陣列"的搜索排top1 幾年後的我又整理一篇比較詳細的,建議可以直接來這裡看。

還是有不懂的也歡迎到我部落格留言詢問 https://charlottehong.blogspot.com/2017/11/c-c.html 現在回頭看看,乾這篇的我在寫什麼東西~尷尬癌發作了 **********************************************************/ #include #include #definerow3 #definecol2 //為什麼容器是(int**)參見底下 voidpri_arr(int**p1,int*p2){ printf("p1[0]=%d\n",p1[0][0]); printf("p1[0]=%d\n",p1[0][1]); printf("p1[0]=%d\n",p1[0][2]); printf("p1[1]=%d\n",p1[1][0]); printf("p1[1]=%d\n",p1[1][1]); printf("p1[1]=%d\n",p1[1][2]); /*可以試試看*/ //printf("p1[0][3]=%d\n",p1[0][3]); /* **這裡看不懂就給他跳過不影響 這裡有一個問題,因為arr[col][row] 是一起宣告的,所以記憶體位址是連續的 意思就是說arr[0][0]的地址+4 等於arr[1][0]*/ } /*=======================================================*/ intmain(intargc,charconst*argv[]){ intarr2[2]={}; /*======================================*/ intarr[col][row]={ {1,2,3}, {4,5,6} };/*有一個陣列可以放6個整數(int*) 請把他想像成(注意:刻意用不同變數名稱) intarr_1[row]={1,2,3}; intarr_2[row]={4,5,6}; 再想像成(就是兩個地址只是你濃縮一行一起宣告了) int*arr_1; int*arr_2; 當然實際這樣是不能用的(還要new[c++]) 目的只是想要你想像成你宣告了2個一維陣列(指標) *(arr_1)=arr_1[0]; *(arr_1+1)=arr_1[1];*/ /*======================================*/ int*ptr[2];//int*ptr[col]; /*有一個陣列可以放2個地址(int**) 就是ptr變數可以放兩個一維陣列(int*)啦*/ /*======================================*/ //剛剛宣告兩個陣列,把他們的地址塞進去 ptr[0]=&arr[0][0]; //等同於ptr[0]=arr[0]; ptr[1]=&arr[1][0]; /*因為有兩個地址所以我們個別放 可以把它想像成(inti=0,*p=&i;) 只是現在是現在容器不一樣是(int**)*/ /*======================================*/ pri_arr(ptr,arr2); /*一個變數ptr裝了(2個一維陣列地址)把她傳進去 ptr[0]指向[一個指標p(int*)] 指標p指向的記憶體位址有1這個數值 指標(p+1)指向的記憶體位址有2這個數值*/ /*======================================*/ return0; } /*=======================================================*/ /* 參考:http://www.programmer-club.com.tw/showSameTitleN/c/37881.html 關於地址 正確的翻譯應該是記憶體位置, 不過我個人覺得刻意用錯的(地址) 比較好敘述(短)與想像 關於容器 可以把(int)想像成一個杯子這個杯子只能裝(int) (int)與(int*)是不同容器,為了好區別個人建議不要 不要使用(int*p)而使用(int*p),這樣眼睛一看就 知道,阿這兩個容器不一樣,這樣比較好思考。

*在編譯眼睛裡面他們是相等的 *有一種時候可以使用(inti=0,*p=&i;) 關於指標的指標(int**) [指標]可以放[一個地址] int*p=地址; [指標的指標]可以放[指標的陣列] int*p[2]={地址,地址}; inta[2]={紅茶,綠茶}; a=&a[0]=紅茶的地址; [指標的指標的指標] 就跟迴圈一樣,用到三層指標機率不高啦 能拆的話你還是把她拆層雙層指標寫吧XDD 以上純屬個人看法,有誤歡迎告知 如果你也覺得是好方法可以參考使用 其實我也是看了你的問題才學會的,我還只是新手 感謝你問了這個問題,讓我學會了如何傳遞陣列XDD 太深奧的[C規定],什麼的也不太清楚。

反正就是,一直編一直編一直編, 诶發生什麼事情怎麼過了,太神奇了 開始回推奏答案XDDDDDD 看來今天運氣不錯QuQ */ Signupforfree tojointhisconversationonGitHub. Alreadyhaveanaccount? Signintocomment Youcan’tperformthatactionatthistime. Yousignedinwithanothertaborwindow.Reloadtorefreshyoursession. Yousignedoutinanothertaborwindow.Reloadtorefreshyoursession.



請為這篇文章評分?