【C語言細節】int main(int argc, char** argv)裏面的參數你瞭解嗎?

問題

將程序prog.c編譯鏈接後運行:prog -nla hello world則*(*(argv+2))是( )
A.‘p’
B.’-’
C.‘h’
D.‘w’

分析

那麼就要思考argv是什麼?它是哪裏來的呢?
讓我們再回顧一下編寫C語言的代碼框架:
一般都是這樣的:

#include <stdio.h>
int main()
{

return 0;
}

可實際上上述代碼省略了main函數中的參數,實則爲:

#include <stdio.h>
int main(int argc, char** argv)
//或int main(int argc, char* argv[])
{

    return 0;
}

那這裏的參數是什麼意思呢?

實際上,C語言的main函數擁有兩個參數,爲int類型的argc參數,以及char**類型argv參數。其中argc參數的值表示命令行參數的個數,而argv則指向一個字符串數組,該數組存儲了具體的命令行參數的內容。注意程序本身的名字爲命令行的第一個參數。

驗證

接下來,寫一段代碼來打印命令行參數信息:

#include <stdio.h>
int main(int argc, char** argv)
{
    int i;
    printf("%d\n",argc);		//輸出argc的值,也就是命令行參數的個數(包括程序名)
    for (i = 0; i < argc; ++i)
    {
        printf("argv[%d] = %s\n", i, argv[i]);//輸出每個數組的值
    }
    printf("*(*(argv+2)) = %c\n",*(*(argv+2)));//輸出開頭問題的答案
    return 0;
}

在這裏插入圖片描述

總結

從結果可以很清楚的看出argc和argv代表的都是什麼。既然知道了每個變量表示的什麼,那麼結果自然而然的也就出來了。
最後再分析一下這個題目吧:

問題:*(*(argv+2))
分析:
argv+2			//地址加2,相當於argv[2]的地址
*(argv+2)		//表示字符數組argv[2],同時表示字符串‘hello’的首地址
*(*(argv+2))	//首地址上的值,也就是‘h’

Over!

發佈了59 篇原創文章 · 獲贊 44 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章