鱼C论坛

 找回密码
 立即注册
查看: 1621|回复: 12

[已解决]请问主函数传参给子子函数问题怎么高效?

[复制链接]
发表于 2021-4-14 10:28:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 我叫学得会 于 2021-4-14 11:56 编辑

师傅们,请问主函数传参数给子子函数,什么方法比较高效不占内存?还请师傅们示例,谢谢师傅们!


  1. #include <iostream>
  2. #include <windows.h>
  3. #include <string>
  4. //#include "b64/base64.h"

  5. //传进参数:geturl: http://www.baidu.com/

  6. using namespace std;

  7. int main(int argc, char** argv[])
  8. {
  9.         if (argc != 2)
  10.         {
  11.                 return -1;
  12.         }
  13.         else if(argv[1] == 1)
  14.         {
  15.                 test1();
  16.                 test3();
  17.                 return 0;
  18.         }
  19.         else
  20.         {
  21.                 return -1;
  22.         }
  23. }


  24. void test1()
  25. {
  26.         
  27.         while (true) {
  28.                 try {

  29.                         test2();
  30.                         
  31.                 }
  32.                 catch (const std::exception& e)
  33.                 {

  34.                 }

  35.         }
  36.         return;
  37. }

  38. void test2()
  39. {
  40.         MessageBox(NULL, TEXT(geturl), TEXT("帮助"), MB_OK);
  41.         return;
  42. }
复制代码
最佳答案
2021-4-15 07:04:17
我叫学得会 发表于 2021-4-14 20:11
就是把主函数 输入的值(一串网址)传递给子函数里的子函数调用,我自己写的感觉不正规,想求个行家版本 ...
  1. #include <stdio.h>

  2. void test4(char *s)
  3. {
  4.     printf("瞧,主函数从命令行传进来的参数  跑到我这里了,它就是:\n %s\n",s);
  5. }

  6. void test3(char *s)
  7. {
  8.     test4(s);
  9. }

  10. void test2(char *s)
  11. {
  12.     test3(s);
  13. }

  14. void test1(char *s)
  15. {
  16.     test2(s);
  17. }

  18. int main(int argc, char* argv[])
  19. {
  20.     if (argc<2)
  21.     {
  22.         printf("需要参数\n");
  23.         return 0;
  24.     }
  25.     test1(argv[1]);
  26.     return 0;
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-4-14 12:41:42 | 显示全部楼层
教教孩子吧~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-14 18:26:37 From FishC Mobile | 显示全部楼层
我叫学得会 发表于 2021-4-14 12:41
教教孩子吧~

通过命令行传??对于子函数肯定是通过栈传参啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-14 19:06:37 | 显示全部楼层
wp231957 发表于 2021-4-14 18:26
通过命令行传??对于子函数肯定是通过栈传参啊


师傅可以代码示范一下吗?,这种资料太少找不到示例,寻找高效的方法,不占太多内存的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-14 19:22:16 From FishC Mobile | 显示全部楼层
我叫学得会 发表于 2021-4-14 19:06
师傅可以代码示范一下吗?,这种资料太少找不到示例,寻找高效的方法,不占太多内存的

不知道你想干嘛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-14 20:11:50 | 显示全部楼层

就是把主函数 输入的值(一串网址)传递给子函数里的子函数调用,我自己写的感觉不正规,想求个行家版本、、、
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-14 20:13:17 From FishC Mobile | 显示全部楼层
我叫学得会 发表于 2021-4-14 20:11
就是把主函数 输入的值(一串网址)传递给子函数里的子函数调用,我自己写的感觉不正规,想求个行家版本 ...

我也③楼都问过了,你这个网址是通过命令行方式传进去吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-14 20:41:33 | 显示全部楼层
我叫学得会 发表于 2021-4-14 20:11
就是把主函数 输入的值(一串网址)传递给子函数里的子函数调用,我自己写的感觉不正规,想求个行家版本 ...

说半天 也没说明白你想干嘛,瞎写了一个   看看是不是你想要的

  1. #include <stdio.h>

  2. void test(char *s)
  3. {
  4.     printf("瞧,主函数从命令行传进来的参数  跑到我这里了,它就是:\n %s\n",s);
  5. }

  6. int main(int argc, char* argv[])
  7. {
  8.     if (argc<2)
  9.     {
  10.         printf("需要参数\n");
  11.         return 0;
  12.     }
  13.     test(argv[1]);
  14.     return 0;
  15. }
  16. /*
  17. PS E:\wp> ./test2 http://www.baidu.com
  18. 瞧,主函数从命令行传进来的参数  跑到我这里了,它就是:
  19. http://www.baidu.com
  20. PS E:\wp> ./test2
  21. 需要参数
  22. PS E:\wp>
  23. */
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-14 21:29:17 | 显示全部楼层
本帖最后由 我叫学得会 于 2021-4-14 22:21 编辑
wp231957 发表于 2021-4-14 20:41
说半天 也没说明白你想干嘛,瞎写了一个   看看是不是你想要的


是这样的,网址是 命令行传参主函数,然后这个test(argv[1]);test()里面还包涵着其他子函数,参数还要传进这个test2() test3()等其他都会调用这个值,求高效传递方法

#include <stdio.h>

void test(char *s)                                       //这里还包括2个子函数需要调用 main函数的参数
{
    printf("瞧,主函数从命令行传进来的参数  跑到我这里了,它就是:\n %s\n",s);

    test2(需要主函数的参数值);
    test3(需要主函数的参数值);
}

int main(int argc, char* argv[])
{
    if (argc<2)
    {
        printf("需要参数\n");
        return 0;
    }
    test(argv[1]);
    return 0;
}
/*
PS E:\wp> ./test2 http://www.baidu.com
瞧,主函数从命令行传进来的参数  跑到我这里了,它就是:
http://www.baidu.com
PS E:\wp> ./test2
需要参数
PS E:\wp>
*/
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-14 22:22:39 | 显示全部楼层
8楼的代码不够高效吗?你所说的高效指的是?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-14 22:46:19 | 显示全部楼层
人造人 发表于 2021-4-14 22:22
8楼的代码不够高效吗?你所说的高效指的是?



就是 test(argv[1])函数下还包括其他子函数需要调用main函数的值,所以有点乱。。。




  1. #include <stdio.h>

  2. void test(char *s)
  3. {
  4.     printf("瞧,主函数从命令行传进来的参数  跑到我这里了,它就是:\n %s\n",s);

  5.     test3(需要调用main函数参数);                          //是这里的众多函数都需要调用main函数的 参数
  6.     test4(需要调用main函数参数);                        //这里也需要调用main函数的 参数

  7. }

  8. int main(int argc, char* argv[])
  9. {
  10.     if (argc<2)
  11.     {
  12.         printf("需要参数\n");
  13.         return 0;
  14.     }
  15.     test(argv[1]);
  16.     return 0;
  17. }
  18. /*
  19. PS E:\wp> ./test2 http://www.baidu.com
  20. 瞧,主函数从命令行传进来的参数  跑到我这里了,它就是:
  21. http://www.baidu.com
  22. PS E:\wp> ./test2
  23. 需要参数
  24. PS E:\wp>
  25. */
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-15 07:04:17 | 显示全部楼层    本楼为最佳答案   
我叫学得会 发表于 2021-4-14 20:11
就是把主函数 输入的值(一串网址)传递给子函数里的子函数调用,我自己写的感觉不正规,想求个行家版本 ...
  1. #include <stdio.h>

  2. void test4(char *s)
  3. {
  4.     printf("瞧,主函数从命令行传进来的参数  跑到我这里了,它就是:\n %s\n",s);
  5. }

  6. void test3(char *s)
  7. {
  8.     test4(s);
  9. }

  10. void test2(char *s)
  11. {
  12.     test3(s);
  13. }

  14. void test1(char *s)
  15. {
  16.     test2(s);
  17. }

  18. int main(int argc, char* argv[])
  19. {
  20.     if (argc<2)
  21.     {
  22.         printf("需要参数\n");
  23.         return 0;
  24.     }
  25.     test1(argv[1]);
  26.     return 0;
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-15 11:32:09 | 显示全部楼层
我叫学得会 发表于 2021-4-14 22:46
就是 test(argv[1])函数下还包括其他子函数需要调用main函数的值,所以有点乱。。。
  1. #include<stdio.h>
  2. #include<math.h>
  3. //typedef enum {true=1,false=0}bool;

  4. void test4(char *s)
  5. {
  6.     printf("我是主函数传参第三个参数:\n %s\n",s);
  7. }

  8. void test3(char *s)
  9. {
  10.     printf("我是主函数传参第二个参数:\n %s\n",s);
  11. }

  12. void test2(char *s)
  13. {
  14.     printf("我是主函数传参第一个参数:\n %s\n",s);
  15. }

  16. void test1(char *s1,char *s2,char *s3)
  17. {
  18.     test2(s1);
  19.     test3(s2);
  20.     test4(s3);
  21. }

  22. int main(int argc, char* argv[])
  23. {
  24.     if (argc<4)
  25.     {
  26.         printf("本程序至少需要三个参数\n");
  27.         return 0;
  28.     }
  29.     test1(argv[1],argv[2],argv[3]);
  30.     return 0;
  31. }

  32. /*
  33.     PS D:\我> ./wp1
  34.     本程序至少需要三个参数
  35.     PS D:\我> ./wp1 1
  36.     本程序至少需要三个参数
  37.     PS D:\我> ./wp1 1 2
  38.     本程序至少需要三个参数
  39.     PS D:\我> ./wp1 1 2 3
  40.     我是主函数传参第一个参数:
  41.     1
  42.     我是主函数传参第二个参数:
  43.     2
  44.     我是主函数传参第三个参数:
  45.     3
  46.     PS D:\我>


  47. */
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 20:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表