*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[11 ]是指針數組的第2個元素,仍是一個指針,*(argv+1)是指針數組的第2個元素指向的值,是一個值。
argv[0],argv[1],...,argv[n]
argv[11 ]
*(argv+1)
argv[1]是地址,具體怎麼調用,要結合具體的上下文程式碼來分析。 一般會把argv[1]放在另一個指標裡int *p = (int*)argv[1];,然後下文*p取得*argv[1]的值。
是地址,具體怎麼調用,要結合具體的上下文程式碼來分析。
放在另一個指標裡
,然後下文
取得
的值。
數組的名稱其實就是一個位址,所以這樣用沒毛病。
在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[11 ]
是指針數組的第2個元素,仍是一個指針,*(argv+1)
是指針數組的第2個元素指向的值,是一個值。argv[1]
是地址,具體怎麼調用,要結合具體的上下文程式碼來分析。
一般會把argv[1]
放在另一個指標裡
int *p = (int*)argv[1];,然後下文
*p取得
*argv[1]的值。
數組的名稱其實就是一個位址,所以這樣用沒毛病。
在C語言中,陣列本來就是個位址