解释c指针参数
您好,我正在学习C语言,并且正在学习一个教程,我已经阅读了关于指针的基础知识解释c指针参数,c,pointers,syntax,C,Pointers,Syntax,您好,我正在学习C语言,并且正在学习一个教程,我已经阅读了关于指针的基础知识 main(int argc, char *argv[]) 我真的不明白如何解释char*argv[] 我是将其理解为指向argv数组的CharPointer,还是指向由char组成的chararray的指针 [更新] 我可能错了,但我认为我很困惑,因为我熟悉: Char*argv[]//指向Char数组的指针 Char argv[]*//在指针对象中设置值 然而,我从未见过char*argv[]您应该将其作为指向ch
main(int argc, char *argv[])
我真的不明白如何解释char*argv[]
我是将其理解为指向argv数组的CharPointer,还是指向由char组成的chararray的指针
[更新]
我可能错了,但我认为我很困惑,因为我熟悉: Char*argv[]//指向Char数组的指针 Char argv[]*//在指针对象中设置值
然而,我从未见过char*argv[]您应该将其作为指向char数组的char指针来阅读,因为您定义它的方式不同,但不要忘记任何类型的指针(char、int、void、float等)之间没有区别。它们都是地址变量(某种类型)
argv
是变量/参数名,它不是类型
,因此CharPointer指向argv数组
不是正确的理解方式。可以说一些指向int数组或double数组的指针,因为int
或double
都是类型
char*argv[]
实际上是一个char*
数组(读取指向char
的指针数组),基本上是一个C字符串数组。您从内到外读取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
试试这个。我相信这是以前问过的。谢谢分享!如果你能更专业一点的话,我很想知道C是如何接受它的参数的。我可能错了,但是我觉得我很困惑,因为我熟悉:Char*argv[]//指向Char数组的指针Char argv[]*//在pointee中设置值但是我从来没有见过Char*argv[]@laycat我从来没有见过Char argv[]*,但是Char*argv[]在C++中非常常见。你在哪里看到了char argv[]*?我犯了一个错误,我看到了一个类似于pointerX 45*的语句来更改变量中的值,它类似于char*argv[]?对于最后一个,我可能是错的,但我将它读作,返回f,它是一个2d指针数组。指针请双关
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