您的位置:首頁>正文

C++|函數結果的全域變數、函數返回值、傳址參數三種帶出方式

函數按是否有返回值, 可以分為兩種類型:一是無返回值的類型, 只是提供一種執行效果, 可以單獨構成一個語句。 二是有返回值的類型, 提供一個返回值, 用於運算式或函數參數中。 其實, 如果是用指標或引用作為函數參數, 即使沒有返回值, 也可以對指標指向的資料或引用的資料發生改變。

函數結果有三種帶出方式:分別是全域變數、函數返回值、傳址參數。 通過參數表的參數傳遞是一種參數顯式傳遞方式, 而通過全域變數是一種隱式參數傳遞。

值傳遞方式中, 值參數的作用域相當於該函數的區域變數,

無法帶出結果值, 可以使用return返回方式帶出一個函數結果值。

以指標作為函數參數, 或以引用作為函數參數(C++)可以帶出結果值。

若函數結果需要帶出多個值, 該怎樣實現呢?

1 全域變數方式:在函數體內操作全域變數;

2 陣列方式:如果要返回的是多個相同類型的值, 則可以將這些值放在一個陣列中, 然後返回資料的指標或首位址, 但這個定義在函數體內的陣列必須是靜態方式(靜態類型保存在全域靜態存儲區, 生命期可保持到程式結束);

3 結構體方式:如果要返回的是多個不同類型的值, 則可以將這些值放到一個結構體中, 然後返回結構體或結構體指標, 但應注意的是該結構體必須是在全域範圍內定義的結構體。

4 指標作為參數的方式:指標作為參數, 函式呼叫時, 操作的是指標指向的變數;

5 引用作為參數的方式:引用作為參數, 函式呼叫時, 操作的是引用位址指向的引用變數;

下面用實例來說明:

代碼:

運行結果:

1 3 9 8 4 2 5 0 7 6

max=9,min=0

max=9,min=0

max=9,min=0

max=9,min=0

max=9,min=0

max=9,min=0

附原碼:

#include

#include

typedef struct//定義結構體;

{

int max,min;

} Data;

int MIN;//全域變數;

/* 1 ==================================================

函數功能:通過全域變數MIN帶回最小值、return返回最小值

函數輸入:陣列a、陣列長度

函數輸出:輸出一個陣列的最大值和最小值

==================================================*/

int fun1(int a[],int n)

{

int max;

int i=1;

max=MIN=a[0];//初始化最大值、最小值

for(i=1; i

{

if(a[i]>max) max=a[i];

if(a[i]

}

return max;//函數直接返回max;

}

/* 2==================================================

函數功能:return返回一個陣列指標,陣列元素包括最大值、最小值

函數輸入:陣列a、陣列長度

函數輸出:輸出一個陣列的最大值和最小值

====================================================*/

int *fun2(int a[],int n)

{

int i;

static int b[2];//定義靜態變數

b[0]=b[1]=a[0];//初始化最大值、最小值

for(i=1; i

{

if(a[i]>b[0]) b[0]=a[i];

if(a[i]

}

return b;//返回b[]陣列的位址;

}

/* 3==================================================

函數功能:return返回一個結構體指標,結構體元素包括最大值、最小值

函數輸入:陣列a、陣列長度n

函數輸出:輸出一個陣列的最大值和最小值

====================================================*/

Data *fun3(int a[],int n)

{

Data *p;

int i;

p=(Data *)malloc(sizeof(Data));//指標初始化;

p->max=p->min=a[0];//初始化最大值、最小值

for(i=1; i

{

if(a[i]>p->max) p->max=a[i];

if(a[i]min) p->min=a[i];

}

return p;//返回結構體指標

}

/* 4==================================================

函數功能:return返回一個結構體,結構體元素包括最大值、最小值

函數輸入:陣列a、陣列長度n

函數輸出:輸出一個陣列的最大值和最小值

====================================================*/

Data fun4(int a[],int n)

{

Data p;

int i;

p.min=p.max=a[0];//初始化最大值、最小值

for(i=1; i

{

if(a[i]>p.max) p.max=a[i];

if(a[i]

}

return p;//直接返回結構體;

}

/* 5==================================================

函數功能:通過兩個指針參數帶回最大值、最小值

函數輸入:陣列a、陣列長度n、指標p、指標q

函數輸出:輸出一個陣列的最大值和最小值

====================================================*/

void fun5(int a[],int n,int *p,int *q)

{

int i=1;

*p=*q=a[0];//初始化最大值、最小值

for(i=1; i

{

if(*p

if(*q>a[i]) *q=a[i];

}

}

/* 6==================================================

函數功能:通過兩個變數引用(別名)帶回最大值、最小值

函數輸入:陣列a、陣列長度n、變數引用p、變數引用q

函數輸出:輸出一個陣列的最大值和最小值

====================================================*/

void fun6(int a[], int n, int &p,int &q)//變數引用適用於C++,不適用於C

{

p=q=a[0];//初始化最大值、最小值

for(int i=1; i

{

if(p

if(q>a[i]) q=a[i];

}

}

int main()

{

int a[10]= {1,3,9,8,4,2,5,0,7,6},max,*p;

Data *q;

Data z;

int x,y;

int i;

for(i=0;i<10;i++)

{

printf("%d ",a[i]);

}

printf(" ");

max=fun1(a,10);

printf("max=%d,min=%d ",max,MIN);

p=fun2(a,10);//指標p指向返回的陣列指標

printf("max=%d,min=%d ",p[0],p[1]);

q=fun3(a,10);//指標p指向返回的結構體指標

printf("max=%d,min=%d ",q->max,q->min);

z=fun4(a,10);//返回一個結構體

printf("max=%d,min=%d ",z.max,z.min);

fun5(a,10,&x,&y);

printf("max=%d,min=%d ",x,y);

fun6(a,10,x,y);

printf("max=%d,min=%d ",x,y);

system("pause");

return 0;

}

-End-

運行結果:

1 3 9 8 4 2 5 0 7 6

max=9,min=0

max=9,min=0

max=9,min=0

max=9,min=0

max=9,min=0

max=9,min=0

附原碼:

#include

#include

typedef struct//定義結構體;

{

int max,min;

} Data;

int MIN;//全域變數;

/* 1 ==================================================

函數功能:通過全域變數MIN帶回最小值、return返回最小值

函數輸入:陣列a、陣列長度

函數輸出:輸出一個陣列的最大值和最小值

==================================================*/

int fun1(int a[],int n)

{

int max;

int i=1;

max=MIN=a[0];//初始化最大值、最小值

for(i=1; i

{

if(a[i]>max) max=a[i];

if(a[i]

}

return max;//函數直接返回max;

}

/* 2==================================================

函數功能:return返回一個陣列指標,陣列元素包括最大值、最小值

函數輸入:陣列a、陣列長度

函數輸出:輸出一個陣列的最大值和最小值

====================================================*/

int *fun2(int a[],int n)

{

int i;

static int b[2];//定義靜態變數

b[0]=b[1]=a[0];//初始化最大值、最小值

for(i=1; i

{

if(a[i]>b[0]) b[0]=a[i];

if(a[i]

}

return b;//返回b[]陣列的位址;

}

/* 3==================================================

函數功能:return返回一個結構體指標,結構體元素包括最大值、最小值

函數輸入:陣列a、陣列長度n

函數輸出:輸出一個陣列的最大值和最小值

====================================================*/

Data *fun3(int a[],int n)

{

Data *p;

int i;

p=(Data *)malloc(sizeof(Data));//指標初始化;

p->max=p->min=a[0];//初始化最大值、最小值

for(i=1; i

{

if(a[i]>p->max) p->max=a[i];

if(a[i]min) p->min=a[i];

}

return p;//返回結構體指標

}

/* 4==================================================

函數功能:return返回一個結構體,結構體元素包括最大值、最小值

函數輸入:陣列a、陣列長度n

函數輸出:輸出一個陣列的最大值和最小值

====================================================*/

Data fun4(int a[],int n)

{

Data p;

int i;

p.min=p.max=a[0];//初始化最大值、最小值

for(i=1; i

{

if(a[i]>p.max) p.max=a[i];

if(a[i]

}

return p;//直接返回結構體;

}

/* 5==================================================

函數功能:通過兩個指針參數帶回最大值、最小值

函數輸入:陣列a、陣列長度n、指標p、指標q

函數輸出:輸出一個陣列的最大值和最小值

====================================================*/

void fun5(int a[],int n,int *p,int *q)

{

int i=1;

*p=*q=a[0];//初始化最大值、最小值

for(i=1; i

{

if(*p

if(*q>a[i]) *q=a[i];

}

}

/* 6==================================================

函數功能:通過兩個變數引用(別名)帶回最大值、最小值

函數輸入:陣列a、陣列長度n、變數引用p、變數引用q

函數輸出:輸出一個陣列的最大值和最小值

====================================================*/

void fun6(int a[], int n, int &p,int &q)//變數引用適用於C++,不適用於C

{

p=q=a[0];//初始化最大值、最小值

for(int i=1; i

{

if(p

if(q>a[i]) q=a[i];

}

}

int main()

{

int a[10]= {1,3,9,8,4,2,5,0,7,6},max,*p;

Data *q;

Data z;

int x,y;

int i;

for(i=0;i<10;i++)

{

printf("%d ",a[i]);

}

printf(" ");

max=fun1(a,10);

printf("max=%d,min=%d ",max,MIN);

p=fun2(a,10);//指標p指向返回的陣列指標

printf("max=%d,min=%d ",p[0],p[1]);

q=fun3(a,10);//指標p指向返回的結構體指標

printf("max=%d,min=%d ",q->max,q->min);

z=fun4(a,10);//返回一個結構體

printf("max=%d,min=%d ",z.max,z.min);

fun5(a,10,&x,&y);

printf("max=%d,min=%d ",x,y);

fun6(a,10,x,y);

printf("max=%d,min=%d ",x,y);

system("pause");

return 0;

}

-End-

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示