如何从main()函数外部访问argv []?

Ser*_*rgi 10 c argv command-line-arguments

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

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

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

所以我声明了如下指针:

char *(*name)[];
Run Code Online (Sandbox Code Playgroud)

哪个应该是指向字符指针数组的指针.但是,当我尝试将其指向时,argv[]我会从不兼容的指针类型获得对赋值的警告:

name = &argv;
Run Code Online (Sandbox Code Playgroud)

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

Arm*_*yan 7

char ** name;
...
name = argv;
Run Code Online (Sandbox Code Playgroud)

会做的伎俩:)

你看到的char *(*name) [] 是一个指向char的指针数组的指针.您的函数参数argv具有指向char的指针的类型指针,因此&argv具有指向指向char的指针的类型指针.为什么?因为当你声明一个函数来获取一个数组时,编译器就像一个带指针的函数一样.那是,

void f(char* a[]);
void f(char** a);
void f(char* a[4]);
Run Code Online (Sandbox Code Playgroud)

绝对相同的等效声明.并不是说数组是指针,而是作为函数参数

HTH


Ben*_*Ben 5

这应该有效,

char **global_argv;


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

int main(int argc, char *argv[]){
  global_argv = argv;
 f(); 
}
Run Code Online (Sandbox Code Playgroud)