搜尋

首頁  >  問答  >  主體

c++ - c語言指標的問題

*argv[]
argv是位址,*argv[]是地址指向的變數。
既然argv是位址,為什麼可以這樣呼叫argv[1]

给我你的怀抱给我你的怀抱2706 天前1005

全部回覆(7)我來回復

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-30 09:59:22

    argv[1] 等價於 *(argv+1)

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-06-30 09:59:22

    想必你是問的是 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};

    有意思了吧~其實有時候你想理解,就是換個寫法的問題。

    回覆
    0
  • PHP中文网

    PHP中文网2017-06-30 09:59:22

    樓主是想說

    int main(int argc, char *argv[])

    中的*argv[]吧?

    char *argv[]是一個數組,數組的元素是char *,每一個char *都用來指向一個字串的首位址。所以argv[1]就是指向第二個字串的首位址(我們假設第一個字串是argv[0])。所以說,argv[1]也還是位址,是一個字串的首位址。

    數組和指標只有在作為函數參數時候才可以認為是一樣的,所以這裡的char *argv[]也可以寫成char **argv,不知道這樣是不是好理解些。

    回覆
    0
  • 怪我咯

    怪我咯2017-06-30 09:59:22

    傳參時類型為*argv[], 相當於**argv,即為指標的指標

    回覆
    0
  • 巴扎黑

    巴扎黑2017-06-30 09:59:22

    這裡*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]的值。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-30 09:59:22

    數組的名稱其實就是一個位址,所以這樣用沒毛病。

    回覆
    0
  • 为情所困

    为情所困2017-06-30 09:59:22

    在C語言中,陣列本來就是個位址

    回覆
    0
  • 取消回覆