c语言:从函数中返回多个变量

从函数中返回一个值可以使用返回值,但是如果要返回多个值呢?

你肯定想到了让被调函数修改主调函数内变量的方法---将指针作为参数传递到被调函数中。就像scanf函数那样。

scanf("%d%d%d", &a, &b, &c);   //  scanf从键盘读入3个整型并存储到变量abc中。

那么,如果函数需要返回多个指针变量呢?

将指针的指针,也就是本节中讨论的二级指针作为参数传入函数。即可让被调函数返回多个指针。

void func(int **a, int **b)

{

static int x = 100; static int y = 200;

*a = &x;

*b = &y;

}

#include <stdio.h> int main()

{

//  两个指针,初始化为空

int *a = NULL;

int *b = NULL;

func(&a, &b);    //  将指针的指针传入被调函数

if (a != NULL && b != NULL)

         printf("a=%d b=%d\n", *a, *b);

return 0;

}

 

main函数中,声明两个指针并把它们初始化为 NULL

NULL 是一个符号常量,由 #define NULL 0 定义的一个符号常量。关于符号常量,请参见变量与常量

将指针初始化为NULL,也就是将指针内保存的地址设置为0。让指针初始化为零是一个非常好的编码习惯。

一般结合指针判空,即 if (a != NULL && b != NULL) ,来判断指针是不是有一个正确的指向了。

调用函数 func 后,两个指针均被修改为有效指针,即非0

我们通过判断指针是不是非零来确定函数 func 已经给指针赋值了。

若指针仍然为0,则说明函数 func 并未给指针赋值,不可以使用没有明确指向的指针。

函数 func 内部, &x &y 取得变量 x y 的指针,类型为 int *

在被调函数内,为了修改主调函数中的变量,先对二级指针 a、b 取值,将 int ** 转换为 int * ,再赋值一个 int 给它。

类似于使用一级指针作为参数时,先对一级指针 a、b 取值,将 int * 转换为 int ,再赋值一个 int 给它。

void func(int *a, int *b)

{

int x = 100;

int y = 200;

*a = x;      //  int *转换为int,再赋值一个int给它

*b = y;      //  int *转换为int,再赋值一个int给它

}

void func(int **a, int **b)

{

static int x = 100;

static int y = 200;

*a = &x;     //  int **转换为int *,再赋值一个int *给它

*b = &y;     //  int **转换为int *,再赋值一个int *给它

}

 

 

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值