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

c語言將函數值返回到數組中

發布時間: 2022-05-29 11:20:49

c語言中調用函數如何返回多個值

主要可以通過指針或數組返回多個值,測試代碼如下,
//程序功能,通過結構體實現多個數據返回及通過多個變數指針實現
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>
#define
PI
3.1415926
struct
test
{
int
x;
char
str[20];
};
//返回結構體,實現多個數據返回
struct
test*
getTest()
{
struct
test
*t=NULL;
t=(struct
test*)malloc(sizeof(struct
test));
if(!t)
return
NULL;
t->x=10;
memset(t->str,0,20);
memcpy(t->str,"testinfo",8);
return
t;
}
//變相返回圓的面積、周長
void
cir(double
r,double
*area,double
*girth)
{
*area=PI*r*r;
*girth=PI*r*2;
}
int
main(int
argc,
char
*argv[])
{
double
r=10.2;
double
s=0,g=0;
struct
test
*t1=getTest();
if(!t1)
return
1;
cir(r,&s,&g);
printf("area=%f,girth=%f\n",s,g);
printf("%d,%s\n",t1->x,t1->str);
if(t1)
{
free(&t1);
t1=NULL;
}
return
0;
}
c語言函數名義上函數返回值只能有一個變數或者無返回值,但返回的變數可以是指針或結構體等更復雜的數據,通過指針或結構體從而變相實現多參數返回。可以作為實參間接返回或直接作為返回值返回,但需注意不要返回臨時變數,如getTest()函數中不能定義struct
test
t變數直接返回。

❷ C語言如何在被調函數中返回一個數組的全部值

利用引用
可以在被調函數中改變主調函數中目標變數的值

將數組的引用當做參數
然後在函數中就可以修改數組
這樣實際就相當於返回數組

❸ c語言如何返回一個數組

只能返回一個數,數組不能返回,以數組為函數參數傳給形參時,由於是數組名傳遞(地址傳遞),實參和形參共用一段內存,對形參更改時實參的值也會改變,所以不需要返回值

❹ C語言中怎樣把數組返回到函數值

讓函數connect返回類型是第一個數組的地址就可以了 也就是說 connect是一個返回類型為指針的函數
聲明的時候 char *connect
最後返回地址就可以 return 一維數組名;
其他的不用變

❺ c語言中調用函數的返回值,如果是數組,主函數要輸出這個數組怎麼實現啊

用指針,另外保存數據的變數退出函數時不得消失。

例如:

#include<stdio.h>

int * fun(int n)

{

int i;

static int a[100]; // 這里用static

for (i=0;i<n;i++) a[i]=i;

return &a[0];

}

void main()

{

int i,n=5;

int *p; // 聲明指針

p = fun(n); // 返回指針

for (i=0;i<n;i++) printf("%d ",p[i]); // 把 p 看成數組來輸出

}

得 0 1 2 3 4

(5)c語言將函數值返回到數組中擴展閱讀:

注意事項

1、數組的維度必須是一個常量表達式

int main(void)

{

constexpr int i = 20;

int j = 5;//不是常量表達式

int arr1[i];//正確

int arr2[j];//錯誤

system("pause");

return 0;

}

2、默認情況下,數組的元素被默認初始化。

而且需要注意的是,和內置類型的變數一樣,如果在函數內部定義了某種內置類型的數組,那麼默認初始化會令數組有未定義的值。

❻ 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語言函數中怎麼返回一個二維數組

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

❽ c語言中函數能返回一個數組嗎

不能直接返回一個數組,但是可以用其他方式實現類似功能。
方法1:利用全局變數

分析:全局變數作為C語言的一個知識點,雖然我們都了解它的特點,但在實際教學過程中應用得並不是很多。由於全局變數的作用域是從定義變數開始直到程序結束,而對於編寫有多個返回值的C語言函數,我們可以考慮把要返回的多個值定義成全局變數。當函數被調用時,全局變數被更改,我們再把更改後的全局變數值應用於主調函數中。函數被調用後被更改後的全局變數值即為函數的數個返回值。下面以一個實例演示該方法的應用。
實例1:編寫函數求3個數中的最大值與最小值。
方法:把最大值、最小值分別定義成2個全局變數max、min,在用戶自定義函數中把求出來的最大值與最小值分別賦給全局變數max、min。函數調用完畢後全局變數的max、min值即保存了函數要求返回的值。程序參考代碼如下:
#include "stdio.h"
#include "conio.h"
int max,min;/*定義兩個全局變數用於保存函數返回值*/
void max_min(int a,int b,int c) /*定義求最大最小值的函數*/
{max=min=a; /*初始化最大最小值*/
if(max if(max if(min>b)min=b;
if(min>c)min=c;
}
main()
{int x,y,z;
printf(" 請輸入3個整數:\n");
scanf("%d,%d,%d",&x,&y,&z);
max_min(x,y,z) ;/*調用求最大值與最小值的函數*/
printf("三個數中的最大值為:%d;最小值為:%d",max,min);/*輸出最大值與最小值*/
getch();
}
調試結果如下:
請輸入3個整數:
5,-6,2
三個數中的最大值為:5;最小值為:-6
注意:該方法雖然可以實現有多個返回值的函數,但由於全局變數不能保證值的正確性(因為其作用域是全局,所以程序范圍內都可以修改它的值,如果出現錯誤將非常難以發現),並且全局變數增加了程序間模塊的耦合,所以該方法要慎用。

方法2:傳遞數組指針

分析:在教學過程中,我們知道C語言函數參數的傳遞方式有值傳遞與地址傳遞。當進行值傳遞時,主調函數把實參的值復制給形參,形參獲得從主調函數傳遞過來的值運行函數。在值傳遞過程中被調函數參數值的更改不能導致實參值的更改。而如果是地址傳遞,由於傳遞過程中從實參傳遞過來的是地址,所以被調函數中形參值的更改會直接導致實參值的更改。因此,我們可以考慮把多個返回值作為數組元素定義成一個數組的形式,並使該數組的地址作為函數的形式參數,以傳址方式傳遞數組參數。函數被調用後,形參數組元素改變導致實參改變,我們再從改變後的實參數組元素中獲得函數的多個返回值。以下實例演示該方法的應用。
實例2:編寫函數求一維整形數組的最大值與最小值,並把最大值與最小值返回給主調函數。
方法:以指針方式傳遞該一維數組的地址,然後把數組的最大值與數組的第一個元素交換,把數組的最小值與最後一個元素交換。函數被調用完畢後,實參數組中的第一元素為數組的最大值,實參數組中最後一個元素為數組的最小值,從而實現返回數組的最大值與最小值的功能。程序參考代碼如下:
#include "stdio.h"
#include "conio.h"
void max_min(int *ptr,int n) /*定義求數組最大值最小值的函數,傳遞數組指針*/
{int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/
int *temp;/*用於交換位置*/
*temp=*ptr;
for(i=0;i{
if(*ptr<*(ptr+i))/*最大值與第一個元素進行交換*/
{
k=i;
*temp=*ptr;
*ptr=*(ptr+k);
*(ptr+k)=*temp ;
}
if(*(ptr+n-1)>*(ptr+i))/*最小值與最後一個元素進行交換*/
{
j=i;
*temp =*(ptr+n-1);
*(ptr+n-1)=*(ptr+j);
*(ptr+j)= *temp ;}
}
}
/*調用最大最小值函數*/
main()
{
int A[6],i;
for(i=0;i<6;i++)
scanf("%d",&A[i]);
max_min(A,6);
printf("max=%d, min=%d\n \n",A[0],A[5]);
getch();
}
調試結果如下:
請輸入6個整形數,以空格隔開:
5 8 9 32 -6 4
max=32,min=-6
注意:該方法適用於多個返回值的數據類型一致的情況。當返回值數據類型不一致時,不適用該方法

❾ 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語言實現調用函數的返回值為一數組的地址

這個問題一個較為妥善的方法是把數組定義在主函數,再傳入數組地址給自定義函數,如果你非要在自定義函數里定義也行,至於是否需要設置為static,那得看情況,因為函數退出時棧空間並不是馬上被刷新,如果你能保證該棧空間在你訪問前沒被釋放就沒必要定義為static,但是保險起見定義static更好,因為你可能不知道到底該內存是不是被重新寫入了數據,至於你說要返回指向指針的指針,我舉個例子,int**
fun(),這個就是返回一個指向指針的指針,其指向的指針指向int型,呵呵,明白了沒