日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

转载:(C/C++函数返回多个值)

發(fā)布時間:2025/3/15 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转载:(C/C++函数返回多个值) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

當(dāng)我們在處理一個數(shù)組的時候常常會碰到這樣的問題:輸入一個數(shù)組,和數(shù)組的一個元素,返回該元素所在行數(shù)和列數(shù)。這樣就需要返回多組兩個值,且組數(shù)不定。上述類型的函數(shù)在c語言程序里面存在兩個問題。第一,函數(shù)只能返回一個值(指針);第二,若以指針返回值,則不確定指針?biāo)傅膬?nèi)存大小。以下先分別解決這兩個問題,之后綜合考慮。

1返回多個值的函數(shù)

1.1采用指針參量記錄值

不用函數(shù)的返回值,直接用指針來處理。在函數(shù)的輸入項里加入一個指針,用來保存記錄多個值。如下所示,a[N][M]為要處理的數(shù)組,s為要找的數(shù),指針c則記錄值,并傳回原函數(shù)。

1 int find_num1_1(int a[N][M],int s,int *c) 2 { 3 int i,j; 4 for(i=0;i<N;i++) 5 for(j=0;j<M;j++) 6 if(a[i][j]==s) 7 { 8 c[0]=i;c[1]=j; 9 return 1; 10 } 11 return 0; 12 }

1.2采用函數(shù)返回指針

可以直接定義一個返回指針的函數(shù),將指針返回,再經(jīng)指針取到所需要的值。如下,函數(shù)返回一個指針,用指針記錄需要輸出的結(jié)果。

1 int *find_num1_2(int a[N][M],int s) 2 { 3 int *co; 4 int i,j; 5 6 co=(int *)malloc(2*sizeof(int)); 7 for(i=0;i<N;i++) 8 for(j=0;j<M;j++) 9 if(a[i][j]==s) 10 { 11 co[0]=i;co[1]=j; 12 return co; 13 } 14 free(co); 15 co=NULL; 16 return co; 17 }

但這里有一個問題,若找到了s在a中對應(yīng)的行和列,前面用mallloc所分配的內(nèi)存區(qū)域就不能得到釋放,從而浪費內(nèi)存。

2返回動態(tài)指針

因為數(shù)組中的值相同的數(shù)目不確定性,用大的數(shù)組太浪費內(nèi)存,所以要采用動態(tài)內(nèi)存的辦法。如上相同對應(yīng)也有兩種傳回的辦法,但這里我只是提到采用指針參量記錄值的辦法來返回動態(tài)指針。這里我們需要注意的是,在為一個指針分配內(nèi)存的時候,只能進行一次分配(這句話我不太確定,希望有知道的看客們能提供一些指導(dǎo))。于此,我們必須首先要定義一個函數(shù)來返回相同項目的個數(shù),之后才能對其分配內(nèi)存。函數(shù)如下:

1 int find_num2(int a[N][M],int s, int (*c)[2]) 2 { 3 int i,j,n=0; 4 for(i=0;i<N;i++) 5 for(j=0;j<M;j++) 6 if(a[i][j]==s) 7 { 8 c[n][0]=i,c[n][1]=j; 9 n++; 10 } 11 return n; 12 } 13 int same_num(int a[N][N],int s) 14 { 15 int i,j,n=0; 16 for(i=0;i<N;i++) 17 for(j=0;j<M;j++) 18 if(a[i][j]==s) 19 ++n; 20 return n; 21 }

內(nèi)存分配在上級函數(shù)中,這樣就比較容易釋放內(nèi)存。

1 n=same_num(a,s); 2 cc=(int (*)[2])malloc(n*2*sizeof(int)); 3 if(find_num2(a,s,cc)!=0) 4 while(n--) 5 printf("number is in the (%d,%d)\n",cc[n][0],cc[n][1]); 6 else 7 printf("can't find it\n"); 8 free(cc);

這樣就能完美地實現(xiàn)要求,且輸出的數(shù)據(jù)可用于其他函數(shù)處理。

轉(zhuǎn)載于:https://www.cnblogs.com/infinitelearning/p/10034418.html

與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的转载:(C/C++函数返回多个值)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。