C语言中main函数参数的&argv[2]代表什么含义?
核心结论先给你说清楚
&argv[2] 是 argv 指针数组中下标为2的元素的地址,类型是char **,也就是指向「第二个命令行参数(下标从0开始算的话就是第三个元素)的字符串地址」的指针,本质是把argv数组从下标2开始的子数组首地址传给mystrtype函数。
拆解逻辑你就能懂了
首先你有个小误区:argv 不是二维数组,是char **类型,也就是指向char*类型元素的数组的首指针,这个数组里的每一个元素存的都是对应命令行参数字符串的首地址:
argv本身存的是数组第一个元素argv[0]的地址,等价于&argv[0],argv[0]存的是程序本身的路径字符串首地址argv[1]存的是第一个传入的参数的字符串首地址,类型是char*argv[2]存的是第二个传入的参数的字符串首地址,类型也是char*- 你对
argv[2]取地址得到的&argv[2],就是数组里下标为2的那个char*元素本身的内存地址,类型升级为char**
为什么代码里要这么写
你传的第一个参数是argc-2,很明显mystrtype函数要处理的是除了程序本身、第一个参数之外剩下的所有参数,把&argv[2]传进去之后,函数内部拿到这个char**指针就可以直接按数组访问:args[0]对应原argv[2],args[1]对应原argv[3],直到遍历完剩下的argc-2个参数,不用再手动做下标偏移。
举个实际运行的例子就更清楚:假设你执行命令是./demo check hello world
argv[0]="./demo"的首地址argv[1]="check"的首地址argv[2]="hello"的首地址argv[3]="world"的首地址&argv[2]就是存"hello"地址的那个数组元素的内存地址,函数拿到它之后就可以直接处理hello、world这两个后续参数。
内容的提问来源于stack exchange,提问作者zelph14
相关产品推荐
相关产品推荐

