A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zjw66485542 中级黑马   /  2014-4-4 11:12  /  1546 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zjw66485542 于 2014-4-4 12:58 编辑

  1. <P>#include
  2. int main(int argc, const char * argv[])
  3. {
  4. }</P>
复制代码

我想问main函数括号里面的那个参数是什么作用?
一般情况下int main()就可以了 ,返回一个整形值,什么时候需要添加这个参数
对下面程序的执行有什么影响吗?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

6 个回复

倒序浏览
argv其实就是个二级指针(即是指向指针的指针),第一个int修饰是表示argv指向的指针指向了一个整形,不能修改;第二个const修饰是表示argv指向的指针是个常量,不能对其进行增减操作。
argv[0]其实就是argv指向的第一个指针(char* 类型指针),它实际上指向 一个以'\'结束的字符串。
一般情况下:argv[0] - argv[argc-1] 存储着函数的各个参数,也就是说用来接受并存储你所提供的参数数值的。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
星河鹭起 发表于 2014-4-4 11:44
argv其实就是个二级指针(即是指向指针的指针),第一个int修饰是表示argv指向的指针指向了一个整形,不能 ...

一般情况下:argv[0] - argv[argc-1] 存储着函数的各个参数,也就是说用来接受并存储你所提供的参数数值的。


这句话你的意思就是说  这个main和其他自己定义的带参函数是一样的,是可以接受传递的参数值的,是这个意思么?
回复 使用道具 举报
zjw66485542 发表于 2014-4-4 11:52
一般情况下:argv[0] - argv[argc-1] 存储着函数的各个参数,也就是说用来接受并存储你所提供的参数数值 ...

嗯  可以这么理解
回复 使用道具 举报
星河鹭起 发表于 2014-4-4 11:54
嗯  可以这么理解

我想知道  什么时候能够用到这两个参数。需要把什么参数传递过去啊。
回复 使用道具 举报
本帖最后由 conpgy 于 2014-4-4 12:30 编辑

argc 从终端(比方命令行)接受参数的个数。 argv存储参数内容。
比如:./a.out  2 3 。那么argc为3, argv[0]为./a.out ,argv[1]为1,argv[2]为2
  1. #include <stdio.h>

  2. int main(int argc, char *argv[])
  3. {
  4.         printf("argc = %d\n", argc);

  5.         for(int i = 0; i < argc; i++)
  6.         {
  7.                 char *s = argv[i];
  8.                 printf("%s\n", s);
  9.         }

  10.         return 0;
  11. }

  12. 输入:./a.out 1 2
  13. 执行结果:
  14. argc = 3
  15. ./a.out
  16. 1
  17. 2
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
main函数括号里面有两个参数一个是int argc ,一个是char *argv【】。
int argc中argc是main函数运行时的参数个数,char *argv【】中的argv是参数的内容存在字符型指针数组中。
main函数的参数在一般写程序的时候用不到,只有在外部调试程序或者说是把自己写的程序当成命令行里的命令时用的比较多。例如:在windows中的dos命令行,输入dir就可以看见当前目录下的文件。输入md test就可以在当前目录下创建文件夹等等。其中像md这样的命令可以理解成我们自己写的程序编译生成出来的a.out,test可以理解成我们main函数中接收的外部参数。例如下面这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[])
{
    int i = 0;
    printf("argc = %d\n",argc);

    for(i = 0;i < argc;i++)
    printf("argv[%d] = %s\n",i,argv[i]);

    if(argc > 1)
    {
         if(strcmp(argv[1],"test") == 0)
         {
             printf("test is created\n");
         }
    }
   return 0;
}

你在编译运行这段程序之后,在不加任何参数的情况下,输出为:

argc = 1
argv[0] = md_me(我自己定义的生成的文件名)

当运行程序后面加参数了如md_me test,输出为:

argc = 2
argv[0] = md_me
argv[1] = test
test is created

这样就相当于自己写了一个向系统里添加命令的程序了。
所以对于程序的影响在于你的想法了,是测试自己的这段程序在系统中的运行状态,还是仅仅是为了看看自己的程序内部哪个部分有没有问题。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马