2013-04-22 71 views
2

你好,我正在学习C并且正在学习一个教程,我已经阅读了关于指针基础的知识。解释c指针参数

main(int argc, char *argv[]) 

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

作为CharPointer指向argv数组还是指向由char组成的chararray指针?

[更新]

我也许错了,但是我觉得我很困惑,我所熟悉的:

的char * argv的[] //字符指针数组 字符的argv [] * //集在指针对象值

但是我从来没有见过的char * argv的[]

+1

试试这个【答案】(http://stackoverflow.com/questions/4176326/arguments-to-main-在-C)。我相信这已经被问过。 – 2013-04-22 01:23:39

+1

感谢分享!我有兴趣了解C如何获得更多的技术参数。 – laycat 2013-04-22 01:37:48

回答

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 
+0

为最后一个,我可能错了,但我正在读它,返回f是一个二维数组指针。 指针请*双关意图* – laycat 2013-04-22 14:56:37

0

你应该阅读这是一个字符指针到char,因为你的方式将它定义数组,但不要忘记有任何形式没有区别指针(char,int,voi。) D,浮动等)他们都是地址变量(某种)。

+0

我是否将左侧的说法从右向左或从右向左? – laycat 2013-04-22 01:50:50

0
char *argv[] 

argv是变量/参数名称,它不是一个type,所以CharPointer points to argv array并不了解它的正确方法。可以说一些pointer to int array or double array,因为intdouble是类型。

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

+0

我也许错了,但是我觉得我很困惑,我所熟悉的: 的char * argv的[] //字符指针数组 字符的argv [] * //在指针对象设定值 但是我从来没有见过的char * argv [] – laycat 2013-04-22 01:51:38

+0

@laycat我从来没有见过char argv [] *,但char * argv []在C++中非常常见。你在哪看到char argv [] *? – taocp 2013-04-22 01:54:17

+0

我犯了一个错误我看到一个像pointerX 45 *这样的语句来改变变量的值是类似于char * argv []? – laycat 2013-04-22 03:02:58