Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解释c指针参数_C_Pointers_Syntax - Fatal编程技术网

解释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

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

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