*argv[]
argv是地址,*argv[]是地址指向的變量。
既然argv是地址,為什么能這樣調(diào)用argv[1]
想必你是問的是 int main(int argc, char *argv[])
吧。其實你想這么寫也完全沒有什么問題的 int main(int argc, char **argv)
。
如果你定義一個 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};
有意思了吧~其實有時候你想理解,就是換個寫法的問題。
樓主是想說
int main(int argc, char *argv[])
中的*argv[]
吧?
char *argv[]
是一個數(shù)組,數(shù)組的元素是char *
,每一個char *
都用于指向一個字符串的首地址。所以argv[1]就是指向第二個字符串的首地址(我們假設(shè)第一個字符串是argv[0])。所以說,argv[1]
也還是地址,是一個字符串的首地址。
數(shù)組和指針只有在作為函數(shù)參數(shù)時候才可以認(rèn)為是一樣的,所以這里的char *argv[]
也可以寫成char **argv
,不知道這樣是不是好理解些。
這里*argv[]
定義的是指針數(shù)組,有n個指針類型的數(shù)組元素(argv[0],argv[1],...,argv[n]
)
(argv[1]
是指針數(shù)組的第2個元素,仍是一個指針,*(argv+1)
是指針數(shù)組的第2個元素指向的值,是一個值。)
argv[1]
是地址,具體怎么調(diào)用,要結(jié)合具體的上下文代碼來分析。
一般會把argv[1]
放在另一個指針里int *p = (int*)argv[1];
,然后下文*p
取得*argv[1]
的值。