main函数argv两种参数差异比较

5 篇文章 0 订阅
 #include <stdio.h>                                                   |     #include <stdio.h>                                           
                                                                     |                            
int main(int argc,char ** argv)                                      |     int main(int argc,char * argv[])                             
{                                                                    |     {                                                            
                                                                     |                            
    for (register i=0 ;i <argc ;i++)                                 |         for (register i=0 ;i <argc ;i++)                         
        printf("%s\n",*argv++);                                      |             printf("%s\n",argv[i]);                              
                                                                     |                            
}                                                                    |     }                                                            
                                                                     |                                                                   
Dump of assembler code for function main:                            |                                                     
4 {                                                                  |     Dump of assembler code for function main:                    
   0x0000000000400530 <+0>: push   rbp                               |     4 {                                                          
   0x0000000000400531 <+1>: mov    rbp,rsp                           |        0x0000000000400530 <+0>: push   rbp                       
   0x0000000000400534 <+4>: push   rbx                               |        0x0000000000400531 <+1>: mov    rbp,rsp                   
   0x0000000000400535 <+5>: sub    rsp,0x18                          |        0x0000000000400534 <+4>: push   rbx                       
   0x0000000000400539 <+9>: mov    DWORD PTR [rbp-0x14],edi          |        0x0000000000400535 <+5>: sub    rsp,0x18                  
   0x000000000040053c <+12>: mov    QWORD PTR [rbp-0x20],rsi        |        0x0000000000400539 <+9>: mov    DWORD PTR [rbp-0x14],edi  
                                                                     |        0x000000000040053c <+12>: mov    QWORD PTR [rbp-0x20],rsi
5                                                                   |                                                     
6    for (register i=0 ;i <argc ;i++)                               |     5                                                           
=> 0x0000000000400540 <+16>: mov    ebx,0x0                         |     6    for (register i=0 ;i <argc ;i++)                       
   0x0000000000400545 <+21>: jmp    0x400561 <main+49>              |     => 0x0000000000400540 <+16>: mov    ebx,0x0                 
   0x000000000040055e <+46>: add    ebx,0x1                         |        0x0000000000400545 <+21>: jmp    0x400567 <main+55>      
   0x0000000000400561 <+49>: cmp    ebx,DWORD PTR [rbp-0x14]        |        0x0000000000400564 <+52>: add    ebx,0x1                 
   0x0000000000400564 <+52>: jl     0x400547 <main+23>              |        0x0000000000400567 <+55>: cmp    ebx,DWORD PTR [rbp-0x14]
   0x0000000000400566 <+54>: mov    eax,0x0                         |        0x000000000040056a <+58>: jl     0x400547 <main+23>      
                                                                     |        0x000000000040056c <+60>: mov    eax,0x0                 
                                                                     |                                                     
7        printf("%s\n",*argv++);                                    |     7        printf("%s\n",argv[i]);                            
   0x0000000000400547 <+23>: mov    rax,QWORD PTR [rbp-0x20]        |        0x0000000000400547 <+23>: movsxd rax,ebx                 
   0x000000000040054b <+27>: lea    rdx,[rax+0x8]                   |        0x000000000040054a <+26>: lea    rdx,[rax*8+0x0]         
   0x000000000040054f <+31>: mov    QWORD PTR [rbp-0x20],rdx        |        0x0000000000400552 <+34>: mov    rax,QWORD PTR [rbp-0x20]
   0x0000000000400553 <+35>: mov    rax,QWORD PTR [rax]             |        0x0000000000400556 <+38>: add    rax,rdx                 
   0x0000000000400556 <+38>: mov    rdi,rax                         |        0x0000000000400559 <+41>: mov    rax,QWORD PTR [rax]     
   0x0000000000400559 <+41>: call   0x400410 <puts@plt>             |        0x000000000040055c <+44>: mov    rdi,rax                 
                                                                     |        0x000000000040055f <+47>: call   0x400410 <puts@plt>     
8                                                                   |                                                     
9 }                                                                  |     8                                                           
   0x000000000040056b <+59>: add    rsp,0x18                        |     9 }                                                          
   0x000000000040056f <+63>: pop    rbx                             |        0x0000000000400571 <+65>: add    rsp,0x18                
   0x0000000000400570 <+64>: pop    rbp                             |        0x0000000000400575 <+69>: pop    rbx                     
   0x0000000000400571 <+65>: ret                                    |        0x0000000000400576 <+70>: pop    rbp                     
                                                                     |        0x0000000000400577 <+71>: ret                            
End of assembler dump.                                               |                                                              |
                                                                     |     End of assembler dump.                               
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: main函数的argc、argv参数是用来接收命令行参数的。其argc表示命令行参数的个数,argv是一个指向字符指针的数组,每个元素指向一个命令行参数的字符串。通过这两个参数,可以在程序运行时从命令行获取参数,从而实现程序的灵活性和可配置性。 ### 回答2: 在C语言main函数是一个程序的入口点,程序的执行都是从main函数开始的。在main函数的定义可以使用两个参数,分别是argc和argv。 argc表示传入main函数参数数量,即命令行参数的个数。argv则是一个指向字符串数组的指针,每个字符串表示一个命令行参数。第一个参数是程序名称,从argv[1]开始依次表示其他参数。 通过使用argc和argv,我们可以传递程序的命令行参数,即在命令行输入参数来修改程序的行为。例如,输入./main -v可以开启程序的详细输出模式,或者输入./main -h可以打印程序的帮助信息。 在实际编程,我们可以使用getopt函数来解析命令行参数,从而更方便地使用argc和argv。getopt函数可以自动识别参数和选项,并将其转换为相应的变量。此外,还有一些第三方库和工具可以帮助我们更好地处理命令行参数,例如argparse和cli等。 总之,argc和argv是非常重要的命令行参数,在程序开发经常使用。正确理解和使用argc和argv可以帮助我们更好地实现程序的功能,提高程序的易用性和可维护性。 ### 回答3: 在C语言main函数是程序的入口函数,程序的执行都从main函数开始。在main函数,通常会用到两个参数,它们分别是argc和argv。 argc表示命令行参数的个数,即argument count的缩写。它是一个整数类型的变量,其值至少为1,因为程序名本身也算一个参数。如果在命令行没有传入其他参数,argc就为1。 argv表示命令行参数列表,即argument vector的缩写。它是一个指向字符指针数组的指针,每个指针指向一个参数的字符串,argv[0]存储的是程序名。因此,argv的长度就是argc+1。 举个例子,如果我们在命令行输入了以下命令: ./hello world 123 那么argc的值为3,即有3个参数。而argv数组存储的值为: argv[0]: ./hello argv[1]: world argv[2]: 123 通过argc和argv参数,我们可以实现对命令行输入的参数进行处理。这对于需要用到命令行参数的程序,如批处理脚本、工程构建工具等非常有用。同时,也可以通过使用命令行参数去配合使用其他函数,如标准库函数getopt()可以解析命令行选项并提供错误检测。因此,了解和使用好argc和argv参数是C语言程序设计的基础知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值