10

我碰巧有几个函数可以通过argv[]数组访问程序的不同参数。现在,这些函数嵌套在main()函数内部,因为编译器提供了语言扩展来允许这样的结构。

我想摆脱嵌套函数,以便在不依赖语言扩展的情况下实现互操作性。

首先,我想到了一个数组指针,argv[]一旦程序启动,我将指向它,这个变量将在函数之外main()并在函数之前声明,以便它们可以使用。

所以我声明了这样一个指针如下:

char *(*name)[];

这应该是指向字符指针数组的指针。但是,当我尝试将其指向时,argv[]我会收到来自不兼容指针类型的赋值警告:

name = &argv;

可能是什么问题呢?argv[]您是否想到了从函数外部访问数组的另一种方法main()

4

3 回答 3

7
char ** name;
...
name = argv;

会成功的:)

您看到char *(*name) [] 的是指向 char 指针数组的指针。而您的函数参数 argv 具有指向 char 的指针的类型指针,因此 &argv 具有指向指向 char 的指针的类型指针。为什么?因为当您声明一个函数以获取数组时,编译器与获取指针的函数相同。那是,

void f(char* a[]);
void f(char** a);
void f(char* a[4]);

是完全相同的等价声明。不是说数组是指针,而是作为函数参数

高温高压

于 2010-10-30T09:00:43.383 回答
4

这应该工作,

char **global_argv;


int f(){
 printf("%s\n", global_argv[0]); 
}

int main(int argc, char *argv[]){
  global_argv = argv;
 f(); 
}
于 2010-10-30T09:01:02.320 回答
0
#include <stdio.h>

int foo(int pArgc, char **pArgv);

int foo(int pArgc, char **pArgv) {
    int argIdx;

    /* do stuff with pArgv[] elements, e.g. */      
    for (argIdx = 0; argIdx < pArgc; argIdx++)
        fprintf(stderr, "%s\n", pArgv[argIdx]);

    return 0;
}

int main(int argc, char **argv) {
    foo(argc, argv);
}
于 2010-10-30T09:11:10.953 回答