C语言 一个函数中的参数n传递到另一个函数中去

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 一个函数中的参数n传递到另一个函数中去相关的知识,希望对你有一定的参考价值。

比如在test1()这个函数中得到n的值,怎么让其在test2()中也能用
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void test1();
void test2();

void test1()

int n;
n=5;



void test2()

//在此处打印test1中n的值


int main()

test1();
test2();
return 0;

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

void test1();
void test2();

void test1()

int n;
n=5;


void test2()

//在此处打印test1中n的值
不可能啊!!因为test1中的n是个局部变量,在test1函数结束后,n就不存在了!


int main()

test1();
test2();
return 0;

追问

是的。我想这个参数在test1()中用了,在test2()中可以接着继续用,是不是要定义全局变量?或者怎么传递参数?

追答

是的,一定义成全局可以!

通过返回值或参数传递
全局的不用解释了,返回值+参数方式如下:

int test1( ) //

int n;
n=5;
return n ; //


void test2( int x)

//在此处打印test1中n的值
printf("%d", x ); //这里可以使用x,也就是test1中的n 了


int main()

int a;
a=test1(); //接收返回值到a
test2(a); //将a传到test2中
return 0;

参考技术A 函数类型都是void,不能用返回值来做。那就用全局变量吧。定义全局变量,然后再test1赋值,用test2输入。详细如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int n;//这里定义全局变量
void test1();
void test2();

void test1()

n=5;//这里对n赋值



void test2()

printf("%d",n); //在此处打印test1中n的值



int main()

test1();
test2();
return 0;

如何通过 Dart 中的 onTap 函数将值传递到另一个屏幕?

【中文标题】如何通过 Dart 中的 onTap 函数将值传递到另一个屏幕?【英文标题】:How to pass values to the another screen by the onTap function in Dart? 【发布时间】:2021-10-28 23:57:33 【问题描述】:

我有两页。一是Route,二是Stops。此外,我的代码包含按路线对停靠点进行排序的算法。当我做测试示例并在同一页面上传递停靠点作为路由时,一切正常,但为了更好的 UI,我想将参数放在构造函数和 onTap 方法中。如何将此算法中的参数和另一个屏幕中的术语传递到另一个屏幕?

第一屏:

     body: FutureBuilder(
            future: getMarshrutWithStops(),
            builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) 
              List<RouteWithStops> routes = snapshot.data;
              print(routes?.toString());
              return (routes == null)
     onTap: () 
                                Navigator.push(
                                    context,
                                    MaterialPageRoute(
                                        builder: (context) => StopsPage(
                                         stId: routes[index].stop[index].stId
                                        )));
                              ,


    //the algorithm which is sorted everything by id's

    Future<List<RouteWithStops>> getMarshrutWithStops() async 
        List<Routes> routes = [];
        List<ScheduleVariants> variants = [];
        List<StopList> stops = [];
        final TransportService transService = TransportService();
    
        routes.addAll((await transService.fetchroutes()).toList());
    
        stops.addAll(await transService.fetchStops());
        variants.addAll(await transService.fetchSchedule());
    
        List<RouteWithStops> routesWithStops = [];
    
        for (Routes route in routes) 
          final routeWithStops = RouteWithStops();
    
          routesWithStops.add(routeWithStops);
          routeWithStops.route = route;
    
          routeWithStops.variant =
              variants.where((variant) => variant.mrId == route.mrId).first;
    
          List<RaceCard> cards = [];
    
          cards.addAll(
              await transService.fetchRaceCard(routeWithStops.variant.mvId));
          print(cards);
          List<StopList> currentRouteStops = [];
    
          cards.forEach((card) 
            stops.forEach((stop) 
              if (card.stId == stop.stId) 
                currentRouteStops.add(stop);
              
            );
          );
          routeWithStops.stop = currentRouteStops;
        
        return routesWithStops;
      

我希望存储所有已排序停靠点的第二页:

    class StopsPage extends StatelessWidget 
    
     final int stId;
      const StopsPage(Key key, this.stId) : super(key: key);
    
      @override
      Widget build(BuildContext context) 
    
        return Scaffold(
          appBar: AppBar(),
          body: FutureBuilder(
            future: getMarshrutWithStops(),
            builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) 
              List<RouteWithStops> routes = snapshot.data;
              print(routes?.toString());
              return (routes == null)
                  ? Center(child: CircularProgressIndicator())
                  : ListView.builder(
                      itemCount: routes.length,
                      itemBuilder: (context, index) 
                        return ListTile(
                          title: Text(routes[index].stop.toString()),
                        );
                      );
            ,
          ),
        );
      
    
      Future<List<RouteWithStops>> getMarshrutWithStops() async 
        List<Routes> routes = [];
        List<ScheduleVariants> variants = [];
        List<StopList> stops = [];
        final TransportService transService = TransportService();
    
        routes.addAll((await transService.fetchroutes()).take(10).toList());
    
        stops.addAll(await transService.fetchStops());
        variants.addAll(await transService.fetchSchedule());
    
        List<RouteWithStops> routesWithStops = [];
    
        for (Routes route in routes) 
          final routeWithStops = RouteWithStops();
    
          routesWithStops.add(routeWithStops);
          routeWithStops.route = route;
    
          routeWithStops.variant =
              variants.where((variant) => variant.mrId == route.mrId).first;
    
          List<RaceCard> cards = [];
    
          cards.addAll(
              await transService.fetchRaceCard(routeWithStops.variant.mvId));
          print(cards);
          List<StopList> currentRouteStops = [];
    
          cards.forEach((card) 
            stops.forEach((stop) 
              if (card.stId == stop.stId) 
                currentRouteStops.add(stop);
              
            );
          );
          routeWithStops.stop = currentRouteStops;
        
        return routesWithStops;
      
    

我只是觉得我不需要把整个算法复制粘贴到所有页面上,也许我只需要以for循环开头的一部分算法并将其转移到第二页,所有的过滤止损应该是。我不知道在 onTap 函数中放入什么以及在 Stops 页面上将什么传递给构造函数。

【问题讨论】:

参考这个***.com/a/68259836/2804581 试试this回答 【参考方案1】:

你可以这样做

First PageonTap 中,将值传递为 name parameter

onTap: () 
  Navigator.push(context, MaterialPageRoute(
   builder: (context) => StopPage(stId: routes[index].stop[index].stId))
  );

StopPage 上使用构造函数实现相同

class StopPage extends StatefulWidget 
  final dynamic stId;

  StopPage(this.stId);

【讨论】:

以上是关于C语言 一个函数中的参数n传递到另一个函数中去的主要内容,如果未能解决你的问题,请参考以下文章

急求一个c语言定义函数的程序,有一个参数但无返回值,实现输出一行n

C语言中函数和函数体的区别是啥?

C语言中实际参数和形式参数的设置及传递方式

在C语言中参数是如何传递的?

C:将可变数量的参数从一个函数传递到另一个函数

C语言中的参数传递方式都有哪些