c与cpp中的argc和argv

c与cpp中的argc和argv

代码

cpp 复制代码
#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
    /* argc代表参数个数 */
    cout << "argc = " << argc <<endl;

    for(int i = 0; i < argc; i++)
    {
        cout << argv[i] << endl;
    }


    return 0;
}

argc 和 argv 是 C/C++ 语言中 main 函数的两个标准参数, 用于在程序启动时接收命令行参数.

argc (argument Count): 参数的个数, 表示命令行输入参数的总数, 包括程序名本身, 值至少为 1(因为程序名总是算一个参数);

argv (Argument Vector): 参数的内容(字符串数组), 程序本身的名称(执行文件名)也算第一个参数.

cmd 复制代码
C:\Users\bushuo\Desktop\cplusplus>g++ para_cpp.cpp -o para_cpp.exe

C:\Users\bushuo\Desktop\cplusplus>para_cpp.exe A B C D
argc = 5
para_cpp.exe
A
B
C
D

基本形式

cpp 复制代码
int main(int argc, char *argv[]) {
    // ...
}
cpp 复制代码
int main(int argc, char **argv) {
    // ...
}

这两种写法是等价的, 因为数组作为函数参数传递时会退化(decay)为指针.

char **argv 就是指向 char* 的指针, 本质上表示一个字符串数组.

char * → 一个字符串(字符指针)

char ** → 指向字符指针的指针, 也就是指向一个字符串数组的指针.

cpp 复制代码
char *argv[]                                            // 数组写法
char **argv                                             // 指针写法

这两种在函数参数里是完全等价的, 编译器处理成同一个东西.

例题

cpp 复制代码
#include <iostream>
using namespace std;


int main(int argc, char** argv)
{
    /* argc代表参数个数 */
    int n = 9, i;
    for (i = 1; i < argc; i++)
        n = n * 10 + *argv[i] - '0';
    printf("%d\n", n);
    return 0;
}

假设编译后, 运行上述程序的可执行文件, 输入命令a.exe 123 456 789 100, 则执行结果为

cmd 复制代码
C:\Users\bushuo\Desktop\cplusplus>a.exe 123 456 789 10
91471
相关推荐
fpcc4 小时前
c++编程实践—堆和栈越界调试
c++
yi0114 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
weiabc6 小时前
MSYS2 UCRT64 + g++ C++ 中文输出乱码 完整全过程
c++
Escalating_xu6 小时前
【C 语言】数据在内存中的存储:补码、大小端、整型陷阱与 IEEE 754 全解析
java·c语言·网络
灯澜忆梦7 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下7 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J7 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛7 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有8 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111118 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode