2

您好,我正在学习 C 并且正在学习一个教程,我已经阅读了有关指针基础知识的内容。

main(int argc, char *argv[])

我真的不明白如何解释char *argv[]

我是把它读作 CharPointer 指向 argv 数组,还是指向由 char 组成的 chararray 的指针?

[更新]

我可能错了,但是我认为我很困惑,因为我熟悉:

Char* argv[] // 指向 char 数组的指针 Char argv[]* // 在指针中设置值

但是我从未见过 char *argv[]

4

3 回答 3

2

您从内到外阅读 C 声明,记住主要运算符.->[]比一元运算符(如*. 所以你从最深的嵌套开始,向左或向右,由内而外,优先选择向左或向右。

char *argv[]; // argv is an array of pointer to char
int (*f)();   // f is a pointer to a function returning int

这是我刚刚制作的一个完整示例,您可以运行:

int main(void);

// g is an array of pointer-to-function with no parameters returning int
int (*g[])(void) = {
  main,
  main
};

// f is an array of pointer-to-array of pointer-to-function returning int
int (*(*f[2])[2])(void) = {
  &g,
  &g,
};


int main(void) {
  return *f[0][0] == main;
}

$ ./a.out
$ echo $?
# => 1
于 2013-04-22T01:52:37.153 回答
0

由于您定义它的方式,您应该将其读为指向 char 数组的 char 指针,但不要忘记任何类型的指针(char、int、void、float 等)之间没有区别,它们都是地址变量(有些有点儿) 。

于 2013-04-22T01:28:15.153 回答
0
char *argv[]

argv是变量/参数名称,它不是 a type,所以CharPointer points to argv array不是正确的理解方式。可以说一些pointer to int array or double arraysince intor doubleare types。

char* argv[] 实际上是一个数组char*(读取指向的指针数组char),基本上是一个 C 字符串数组。

于 2013-04-22T01:29:48.810 回答