"++argv"如何正确"The C programming Language by Dennis Ritchie"这个程序?



主函数的第二个参数是char * argv[],这是一个指针数组。在同一本书中提到我们不能在数组名称上使用像"++"这样的操作。但是,在这里我们可以看到++argv已被使用。

#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
int getline(char* line, int max);

/* find: print lines that match pattern from 1st arg */
int main(int argc, char* argv[]) 
{
char line[MAXLINE];
long lineno = 0;
int c, except = 0, number = 0, found = 0;
while (--argc > 0 && (*++argv)[0] == '-')
{
while (c = *++argv[0])
{
switch (c) 
{
case 'x': {
except = 1;
}
break;
case 'n': {
number = 1;
}
break;
default: {
printf("find: illegal option %cn", c);
argc = 0;
found = -1;
}
break;
}
}
}
if (argc != 1)
{
printf("Usage: find -x -n patternn");
}
else
{
while (getline(line, MAXLINE) > 0) 
{
lineno++;
if ((strstr(line, *argv) != NULL) != except) 
{
if (number)
{
printf("%ld:", lineno);
}
printf("%s", line);
found++;
}
}
}
return found;
}

数组作为函数的参数会自动转换为指针。 所以这个:

char *argv[]

与以下完全相同:

char **argv

这就是为什么你可以做argv++.

最新更新