您好,我正在学习 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/