*argv[]argv是地址,*argv[]是地址指向的变量。既然argv是地址,为什么能这样调用argv[1]
argv[1] 等价于 *(argv+1)
想必你是问的是 int main(int argc, char *argv[]) 吧。其实你想这么写也完全没有什么问题的 int main(int argc, char **argv)。
int main(int argc, char *argv[])
int main(int argc, char **argv)
如果你定义一个 char *s = '2333',那这个 s 指的是什么?字符串的首地址吧。同理,*argv[1] 存的是什么?第一个字符串的首地址吧。你可以简单地这么理解,要深入神马的你可以去翻翻书。
char *s = '2333'
s
*argv[1]
char *s = "23333"; char *z = "34444"; char *argv[] = {s, z}; int a = 0; int b = 1; int c[] = {a, b};
有意思了吧~其实有时候你想理解,就是换个写法的问题。
楼主是想说
中的*argv[]吧?
*argv[]
char *argv[]是一个数组,数组的元素是char *,每一个char *都用于指向一个字符串的首地址。所以argv[1]就是指向第二个字符串的首地址(我们假设第一个字符串是argv[0])。所以说,argv[1]也还是地址,是一个字符串的首地址。
char *argv[]
char *
argv[1]
数组和指针只有在作为函数参数时候才可以认为是一样的,所以这里的char *argv[]也可以写成char **argv,不知道这样是不是好理解些。
char **argv
传参时类型为*argv[], 相当于**argv,即为指针的指针
这里*argv[]定义的是指针数组,有n个指针类型的数组元素(argv[0],argv[1],...,argv[n])(argv[1]是指针数组的第2个元素,仍是一个指针,*(argv+1)是指针数组的第2个元素指向的值,是一个值。)
argv[0],argv[1],...,argv[n]
*(argv+1)
argv[1]是地址,具体怎么调用,要结合具体的上下文代码来分析。一般会把argv[1]放在另一个指针里int *p = (int*)argv[1];,然后下文*p取得*argv[1]的值。
int *p = (int*)argv[1];
*p
数组的名称其实就是一个地址,所以这样用没毛病。
在C语言中,数组本来就是个地址
argv[1] 等价于 *(argv+1)
想必你是问的是
int main(int argc, char *argv[])
吧。其实你想这么写也完全没有什么问题的int main(int argc, char **argv)
。如果你定义一个
char *s = '2333'
,那这个s
指的是什么?字符串的首地址吧。同理,*argv[1]
存的是什么?第一个字符串的首地址吧。你可以简单地这么理解,要深入神马的你可以去翻翻书。有意思了吧~其实有时候你想理解,就是换个写法的问题。
楼主是想说
中的
*argv[]
吧?char *argv[]
是一个数组,数组的元素是char *
,每一个char *
都用于指向一个字符串的首地址。所以argv[1]就是指向第二个字符串的首地址(我们假设第一个字符串是argv[0])。所以说,argv[1]
也还是地址,是一个字符串的首地址。数组和指针只有在作为函数参数时候才可以认为是一样的,所以这里的
char *argv[]
也可以写成char **argv
,不知道这样是不是好理解些。传参时类型为*argv[], 相当于**argv,即为指针的指针
这里
*argv[]
定义的是指针数组,有n个指针类型的数组元素(argv[0],argv[1],...,argv[n]
)(
argv[1]
是指针数组的第2个元素,仍是一个指针,*(argv+1)
是指针数组的第2个元素指向的值,是一个值。)argv[1]
是地址,具体怎么调用,要结合具体的上下文代码来分析。一般会把
argv[1]
放在另一个指针里int *p = (int*)argv[1];
,然后下文*p
取得*argv[1]
的值。数组的名称其实就是一个地址,所以这样用没毛病。
在C语言中,数组本来就是个地址