为什么argv可以使用增量运算符

Mic*_*eal 2 c arrays pointers increment argv

它出现在K&R的书中

#include <stdio.h>

main(int argc, char *argv[])
{
    while (--argc > 0)
        printf("%s%s", *++argv, (argc > 1) > " " : "");
    printf("\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在本书中,它说数组不能使用递增或递减运算符,在这个程序中,"argv"应该是数组的名称,为什么它可以使用递增运算符?

Vla*_*cow 5

主要的第二个参数

char *argv[]
Run Code Online (Sandbox Code Playgroud)

被调整为指向数组的第一个元素.那是它的类型

char **argv;
Run Code Online (Sandbox Code Playgroud)

你可以增加指针.

因此,最初argv(调整为指针)指向指向字符串的指针数组的第一个元素,然后++argv指向数组的第二个元素,依此类推.

根据C标准(6.7.6.3函数声明符(包括原型))

  1. 一个参数为""类型的阵列""的声明,应调整至""合格指针为类型"",其中类型限定符(如果有的话)的那些内的指定[]该阵列类型的推导.