在C语言的命令行参数中,我们可以将参数向量指定为char *argv[]
或char **argv
我理解第一种类型,它是一个指向字符的指针数组,但是指向字符的指针数组和第二种类型之间有什么关系呢?
在C语言的命令行参数中,我们可以将参数向量指定为char *argv[]
或char **argv
我理解第一种类型,它是一个指向字符的指针数组,但是指向字符的指针数组和第二种类型之间有什么关系呢?
char *argv[]
%和char **argv
%的区别在于:
char *argv[]
是由char *
个指针组成的array.
char **argv
是指向另一个指向char
的指针的指针.
char *argv[]
可以这样想象:
p1 -> "hello"
p2 -> "world"
p3 -> "!"
// p1, p2 and p3 are
// pointers to strings
// they have type char *
_________________
| p1| p2 | p3 |
—————————————————
// argv looks like this
// it is an array of all the pointers
当在表达式中引用数组argv
的名称时,它将产生指向数组中第一个元素的指针.
在表达式中使用时,数组名称argv
的类型为char **
.这是因为:
数组名称argv
衰减为指向数组的第一个元素的指针.
第一个元素碰巧也是一个指针,因此argv
本质上是指向另一个指针的指针,因此类型为char **