张世来4610484 发表于 2020-3-18 21:27:11

main函数含参数问题


#include <stdio.h>
main (int argc,char *argv[])
{
        while(argc-->1)
                printf("%s\n",*++argv);
}
这样的一段代码,argv已经是指针数组了,最后以%s输出,后面不应该就是地址吗,为什么要加*取值操作符呢

4goodworld 发表于 2020-3-18 21:27:12

char *argv[] ==char** argv
你这样子会不会更容易理解点?
printf %s是要求传递一个 char* 类型的指针
一个char** 类型的指针如p 解引用 如*p,这个*p返回的结果不就是一个   char* 类型的指针?
举例:
int main() {
        const char* argv[] = { "aaa.exe","bbb.exe" };
        printf("%s", *argv);
       
}

chxchxkkk 发表于 2020-3-19 10:06:59

取出来的是数组元素

Mr.Newbe 发表于 2020-3-19 10:42:27

楼主你好
首先应该明确main函数的参数的含义:
argc是命令行参数总个数,argv是具体参数,arv就表示是第i个参数,需要注意的是,argv是可执行程序名

其次,在定义阶段,char *agrv[] 的含义是定义了一个指针变量,它指向的是一个char类型的数组
这段代码的含义是要输出这个main函数的参数,所以,在输出时,要取值,而非地址

另外,带参数的main()函数是要像DOS命令一样能够根据参数执行。ANSI-C(C89/C99)的话main()函数有2种主要形式,第一个是:int main(void),第二个是 int main(int argc, char *argv[])
以上

jackz007 发表于 2020-3-19 16:02:08

本帖最后由 jackz007 于 2020-3-19 16:03 编辑

    argv 是指针数组,数组元素可不就是指针吗,所以, * argv 是一个指针难道有什么问题吗?

rty123 发表于 2020-3-20 08:15:02

%p是地址

红烧不如清蒸 发表于 2020-3-20 10:55:09

本帖最后由 红烧不如清蒸 于 2020-3-20 10:57 编辑

这个的意思是定义一个指针数组,存储的是每个参数对应的地址!,所以需要取值符才能取出对应得参数
页: [1]
查看完整版本: main函数含参数问题