arrays - 用方括号解释函数指针参数

标签 arrays c pointers syntax argv

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

main(int argc, char *argv[])

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

我读它是因为 CharPointer 指向 argv 数组,还是指向由 char 构成的 chararray 的指针?

[更新]

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

char* argv[] // pointer to char array 
char argv[]* // set value in pointee 

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

最佳答案

你从里到外阅读 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

关于arrays - 用方括号解释函数指针参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16138057/

相关文章:

c - 将文件中的某些信息存储到数据结构中

c++ - void指针函数的输出

c - 如何在 C 中使用 [] 声明指向 const 字符数组的 Const 指针

c - 将数组中的值设置为仅等于 1 或 0

c - xlib 将窗口推到其他窗口的后面

arrays - 在 N 个数组中查找公共(public)值

c - sprintf 是做什么的? (是 : FPS Calculation in OpenGL)

c - 这两个地址怎么会不同呢?

arrays - 快速将数据添加到数组

java - 如何从 Java 中的序列化对象加载选择性数据?