當前位置:首頁 » 編程語言 » c語言定義函數返回數組
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言定義函數返回數組

發布時間: 2022-02-06 10:32:45

c語言函數中怎麼返回一個二維數組

1、我們首先定義一個二級指針和一個行列變數[int ** array,row,column;]。

㈡ c語言函數返回數組


在C語言中,無法直接返回一個數組,但是可以通過返回對應類型指針的方式,返回數組。

在大多數情況下,一維數組和一維指針是可以通用的。


比如,定義一個函數,申請一定長度的整型動態數組,其長度用參數傳入,並將結果返回。如出錯,返回空指針NULL。 代碼可以寫成如下形式:

int*int_array_create(intn)//參數n為數組元素個數
{
int*r;
if(n<=0)returnNULL;//參數錯誤
r=(int*)malloc(sizeof(int)*n);//申請內存空間,大小為n個int長度。
returnr;//返回得到的整型數組的指針。
}

㈢ c語言函數返回數組

函數是無法返回數組的,只能返回指針,但返回指針的弊端是指針指向的內存不能是函數的局部變數的。所以還得用傳出參數,有兩個辦法,一是直接用一個array就搞定,另它的每一行的最後一列是計算出來的平均值;另一個方法就是再傳入進去一個指針,返回平均數。第一種可以不修改當前介面直接改,但如果無所謂還是第二種比較好,代碼如下:

voidstudent_aver(floatarray[3][3],floataverage[3]){
inti,j;
floatsum;
for(i=0;i<3;i++){
sum=0;
for(j=0;j<3;j++)
sum=sum+array[i][j];
average[i]=sum/3;
}
}

㈣ C語言中,函數返回值可以是數組

可以為指針或著說是地址。 因為對於數組來說只需要傳遞數組的某個地址例如傳遞數組a[] 的a或者任意一個地址&a[4]等

㈤ 在C語言中如何使函數返回數組

C/C++不能直接返回一個數組。這是由於在C/C++中,數組不是一種類型,因此不能被直接返回。 在C/C++中,一般有兩種方法來返回一個數組。 第一種方法: 返回一個指向數組的指針,例如char (*retArray)[10]聲明了一個函數retArray,該函數可以返回指向具有10個char元素的數組例子如下:#include#includeint (*retArray())[10]{int (*a)[10];int i=0;/*動態開辟空間*/ a=calloc(10,sizeof(int));/*賦值*/for(i=0;i<10;i++){(*a)[i]=i;}return a;}int main(){int (*b)[10]; /*函數返回指向數組的指針*/ b=retArray(); /*列印第一個元素*/ printf("%d/n",(*b)[0]); /*釋放空間*/free(b);return 0;}第二種方法: 如果你不喜歡用指針的形式返回數組,那麼可以採用返回一個結構的形式。這種形式相對較安全,可以避免忘記釋放指針而造成內存泄露,也可以避免訪問懸掛指針造成的錯誤。但缺點是由於結構是先拷貝再返回,因此如果結構較大時,會影響效率和佔用較大內存。 例子如下:#includestruct tag{int a[10];}x,y;struct tag retArray(){int i=0;for(i=0;i<10;i++) x.a[i]=i;return x;}int main(){struct tag y=retArray(); printf("%d/n",y.a[3]);return 0;}注意:(1)在返回指針時要切記要避免內存泄露和訪問懸掛指針。 (2)很多人認為指針和數組等價的,這是錯誤的。int (*a)[10]和int b[10]兩者是不能直接用a=b來賦值的。在數組和指針作為函數參數傳遞時,二者可以認為等價,這是因為數組會被轉化為指針來傳遞。 (3)返回多維數組方法類似。

㈥ c語言中如何使返回值為數組

int Merge1 (int b[ ], int b1[ ], int s, int m, int t )改成int *Merge1 (int b[ ], int b1[ ], int s, int m, int t )

就是int 後面加*,這樣就可以了

㈦ c語言中如何定義一個返回數組的函數

數組不可以直接返回,只能通過參數傳遞出來,比如:
void
fun(int*
p);
int
main()
{
int
a[100];
fun(a);
return
0;
}
希望能幫助你。

㈧ C語言函數中返回數組

你的程序:
main()
{
int
b[3];
b=pop();
}
int
*
pop()
{
int
a[3],i;//定義的局部變數a[3]在調用完之後自動釋放其空間
for(i=0;i<3;i++)
a[i]=i;
return
a;//返回的是指向數組a[3]的地址而不是數組a[3]本身
}
註:既然上面說到調用的方法返回的是指向數組a[3]的地址,所以主函數中b接收的應該是指向數組a[3]的地址,而數組a[3]在方法調用完後又被釋放了,所以b接收不到數組a[3],故出錯。
正確的程序:
#include<stdio.h>
main()
{
int
b[3];
pop(b,3);
}
void
pop(int
a[],int
n)//該方法傳入兩個參數,第一個是傳入指向數組的地址,第二個參數是傳入數組的長度,不需寫返回語句return,只需通過指向數組的地址的傳入就可以直接將數組b[]的值改變
{
int
i;
for(i=0;i<n;i++)
a[i]=i;
}

㈨ C語言數組怎麼返回自定義函數

//一、由函數參數帶回固定的二維數組
void func(int ppout[][2])
{
ppout[0][0] = 1;
ppout[0][1] = 2;
ppout[1][0] = 3;
ppout[1][1] = 4;
}

int _tmain(int argc, _TCHAR* argv[])
{
int pp[2][2];
func(pp);
cout << pp[0][0] << pp[0][1] << endl;
cout << pp[1][0] << pp[1][1] << endl;
system("pause"); //讓窗口暫停,便於看結果
return 0;
}

//二、由函數參數帶回動態二維數組
void func(int** pp, int rows, int columns)
{
int i, j;
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
pp[i][j] = (i + 1) * 10 + j + 1;
}
}
}

int _tmain(int argc, _TCHAR* argv[])
{
int rows = 3, columns = 2;
int** pp;
int i, j;
//申請內存
pp = new int*[rows];

for (j = 0; j < rows; j++)
pp[j] = new int[columns];
func(pp, rows, columns);
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
cout << pp[i][j] << " ";
}
cout << endl;
}
//釋放內存
for (j = 0; j < rows; j++)
delete[] pp[j];
delete[] pp;
system("pause"); //讓窗口暫停,便於看結果
return 0;
}

//如果非要從函數的返回值中帶回二維數組,這是最好的方式
//三、由函數帶回動態二維數組
int** func(int rows, int columns)
{
int i, j;
int** pp;
//申請內存
pp = new int*[rows];
for (j = 0; j < rows; j++)
pp[j] = new int[columns];
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
pp[i][j] = (i + 1) * 10 + j + 1;
}
}
return pp;
}

int _tmain(int argc, _TCHAR* argv[])
{
int rows = 3, columns = 2;
int** pp;
int i, j;
pp = func(rows, columns);
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
cout << pp[i][j] << " ";
}
cout << endl;
}
//釋放內存
for (j = 0; j < rows; j++)
delete[] pp[j];
delete[] pp;
system("pause"); //讓窗口暫停,便於看結果
return 0;
}

//四、由函數帶回二維數組
//這種方式有問題,程序中已經說明,不要採取此方式
const int rows = 3, columns = 2;
int (*func())[columns]
{
int i, j;

static int pp[rows][columns]; //如果不是靜態的,函數退出後其內存就變得無效。
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
pp[i][j] = (i + 1) * 10 + j + 1;
}
}
return pp;
}

int _tmain(int argc, _TCHAR* argv[])
{

int (*pp)[columns];
int i, j;
//pp = new (int[columns]*)[rows];
pp = func();
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
{
cout << pp[i][j] << " ";
}
cout << endl;
}
system("pause"); //讓窗口暫停,便於看結果
return 0;
}

㈩ C語言函數調用關於數組的返回

不用返回了,你這里函數里直接對數組元素進行操作,調用完之後a就是排好的
#include<stdio.h>
main()
{
int
a[count];
……;
order(a,count);//在這個地方調用排序(地方一)
……
}
void
order(int
a[],int
count)
//數組按從小到大排序
{
int
i,j,x;
for(i=0;i<count;i++)
for(j=i+1;j<count;j++)
if(a[i]<a[j])
{
x=a[i];
a[i]=wa[j];
a[j]=x;
}
}