解释c指针参数

时间:2013-04-22 01:21:36

标签: c pointers syntax

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

main(int argc, char *argv[])

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

我是否将它读作CharPointer指向argv数组,或指向chararray的指针由char构成?

[更新]

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

Char * argv [] //指向char数组的指针 Char argv [] * //在pointee中设置值

然而我从未见过char * argv []

3 个答案:

答案 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,因为intdouble是类型。

char* argv[]实际上是char*的数组(读取指向char的数组),基本上是一个C字符串数组。