84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
*argv[]argv ist die Adresse, *argv[] ist die Variable, auf die die Adresse zeigt. Da argv eine Adresse ist, warum kann argv[1] so aufgerufen werden?
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语言中,数组本来就是个地址