您好我正在学习C并且正在学习教程,我已经阅读了有关指针基础知识的内容。
main(int argc, char *argv[])
我真的不明白如何解释char *argv[]
。
我是否将它读作CharPointer指向argv数组,或指向chararray的指针由char构成?
[更新]
我可能错了,但我觉得我很困惑,因为我熟悉:
Char * argv [] //指向char数组的指针 Char argv [] * //在pointee中设置值
然而我从未见过char * argv []
答案 0 :(得分: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
答案 1 :(得分:0)
你应该把它读作char数组的char指针因为你定义它的方式但不要忘记任何类型的指针(char,int,void,float等)之间没有区别它们都是地址变量(某种)。
答案 2 :(得分:0)
char *argv[]
argv
是变量/参数名称,它不是type
,因此CharPointer points to argv array
不是理解它的正确方法。可以说一些pointer to int array or double array
,因为int
或double
是类型。
char* argv[]
实际上是char*
的数组(读取指向char
的数组),基本上是一个C字符串数组。