C语言中函数结果的带出方式

博客介绍了C语言函数结果的带出方式,包括全局变量、函数返回值、传址参数三种。指出参数传递有显式和隐式之分,若需带出多个值,可采用全局变量或地址传递方式。还列举了func1 - func5不同实现方式的示例。

C语言函数结果共有全局变量、函数返回值、传址参数三种带出方式。

通过参数表的参数传递是一种参数显示传递方式,而通过全局变量是一种隐式参数传递。

如果函数结果需要带出多个值,该怎样实现?可以采用全局变量方式带出或通过地址传递(数组方式、结构体方式、指针方式)方式带出来实现。

参考下面这段程序,

func1:采用全局变量和返回局部变量的值(注意不是地址!)

func2:采用采用静态局部数组(静态变量生命周期为定义起至程序结束,所以函数调用结束后仍可以被访问)

func3:采用指向动态内存的局部指针(动态内存的生命周期由程序员自己决定)

func4:采用结构体

func5:采用传址参数(地址传递参数、指针形参)

#include<stdio.h>
#include<stdlib.h>

typedef struct
{
    int min, max;
} Data;

int MIN;    //全局变量

/********************************
* 函数定义
********************************/

int func1(int a[], int n)
/* return返回最大值,MIN带回最小值 */
{
    int i, max;
    max=MIN=a[0];
    for(i=1; i<n; i++)
    {
        if(a[i] > max) max = a[i];
        if(a[i] < MIN) MIN = a[i];
    }
    return max;
}

int *func2(int a[], int n)
/* 将最大值、最小值放到数组b中,通过return返回 */
{
    static int b[2];
    b[0] = b[1] = a[0];
    int i;
    for(i=1; i<n; i++)
    {
        if(a[i]>b[0])
            b[0] = a[i];
        if(a[i] < b[1])
            b[1] = a[i];
    }
    return b;
}

Data *func3(int a[], int n)
/* 将最大值、最小值放到结构体中,通过return返回结构体指针p */
{
    static Data *p;
    int i;
    p = (Data *)malloc(sizeof(Data));   //指针初始化
    p->max = p->min = a[0];
    for(i=1; i<n; i++)
    {
        if(a[i] > p->max)
            p->max = a[i];
        if(a[i] < p->min)
            p->min = a[i];
    }
    return p;
}

Data func4(int a[], int n)
/* 将最大值、最小值放到结构体中,通过结构体p带回返回值 */
{
    Data p;
    int i;
    p.max = p.min = a[0];
    for(i=1; i<n; i++)
    {
        if(a[i] > p.max)
            p.max = a[i];
        if(a[i] < p.min)
            p.min = a[i];
    }
    return p;
}

void func5(int a[], int n, int *p, int *q)
/* 用指针带回结果,指针p指向最大值,指针q指向最小值 */
{
    int i;
    *p = *q = a[0];
    for(i=1; i<n; i++)
    {
        if(a[i] > *p)
            *p = a[i];
        if(a[i] < *q)
            *q = a[i];
    }
}

/********************************
* 主函数
********************************/
void main()
{
    int a[10] = {1,3,9,8,4,2,5,0,7,6}, max, *p;
    Data *q;
    Data z;
    int x, y;

    max = func1(a, 10);
    printf("max=%d min=%d\n", max, MIN);

    p = func2(a, 10);
    printf("max=%d min=%d\n", p[0], p[1]);

    q = func3(a, 10);
    printf("max=%d min=%d\n", q->max, q->min);

    z = func4(a, 10);
    printf("max=%d min=%d\n", z.max, z.min);

    func5(a, 10, &x, &y);
    printf("max = %d min = %d\n", x, y);
}

 

参考资料:《数据结构——用C语言描述(第2版)》p29

转载于:https://www.cnblogs.com/shujuxiong/p/10925240.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值