這是main函數(shù)的固定寫法,其中整型變量argc代表命令行總的參數(shù)的個(gè)數(shù);argv是字符串?dāng)?shù)組,用來存放命令行各個(gè)參數(shù)的指針數(shù)組。
argv[0]:指向程序的全路徑名,argv[1]:指向在DOS命令行中執(zhí)行程序名后的第一個(gè)字符串,argv[2]:指向第二個(gè)字符串以此類推。
新建一個(gè)工程,在命令行下輸入如下幾個(gè)參量:
-k Kinematic4.conf 20171219r.obs 20171219b.obs 20171219r.nav -o GPS-BDS-K-test.pos
for (int count = 0; count < argc; count++)
{
printf('%d: %s\n', count, argv[count]);
}
結(jié)果如下
關(guān)于char *argv[]和char **argv命名方式的區(qū)別可以從字符串和字符串?dāng)?shù)組說起。
字符串:
char argv[8]='beijing';
char argv[8]={'b','e','i','j','i','n','g','\o'};
char *argv ='beijing';
字符串可以有以上三種等價(jià)表述方式,其中第二種中使用”\o”的空字符,意味著字符串本質(zhì)是以空字符(\o)結(jié)尾的char數(shù)組(所以字符串跟字符數(shù)組是有區(qū)別的,字符數(shù)組并不要求結(jié)尾有空字符)。
其中三者也有一定的區(qū)別,前兩個(gè)是數(shù)組名argv是一個(gè)常量(數(shù)組名就是數(shù)組首元素的地址),而指針argv是一個(gè)變量(所以可以使用增量運(yùn)算符,而數(shù)組名不可以),這個(gè)變量初始化的時(shí)候指向字符串的第一個(gè)字符,*argv=”b” ; printf(“%s”,argv))輸出字符串;printf(“%c”,*argv)輸出一個(gè)字符;
字符串?dāng)?shù)組:
char *argv[3] = {'haidian','beijing','china'};
char argv[3][8] = {'haidian','beijing','china'};
上述兩種表述方法展現(xiàn)了一個(gè)簡(jiǎn)單的二維字符串?dāng)?shù)組(argv[0] = “haidian”,argv[1] =”beijing”,argv[2] =”china”)。
*argv[] 是一個(gè)指針數(shù)組,他的元素個(gè)數(shù)是argc個(gè)(例子中為3個(gè)),存放的是指向每一個(gè)參數(shù)的指針(一個(gè)char類型值的地址指向字符串?dāng)?shù)組中某一個(gè)字符串)。第一個(gè)指針是argv[0],它是指向第一個(gè)字符串的第一個(gè)字符(argv[0] = “haidian”;*argv[0]=’h’),第二個(gè)指針是argv[1],它是指向第二個(gè)字符串的第一個(gè)字符(,argv[1] =”beijing”;*argv[1]=’b’),后面以此類推。這里的argv數(shù)組實(shí)際上并不存放字符串,它只是存放字符串的地址(字符串存在程序用來存放常量的那部分內(nèi)存中)。可以把a(bǔ)rgv[0]看作表示第一個(gè)字符串,*argv[0]看成表示第一個(gè)字符串的第一個(gè)字符,printf(“%s”,argv[i]))輸出字符串;printf(“%c”,*argv[i])輸出一個(gè)字符)。
將字符串?dāng)?shù)組和字符串中數(shù)組名和指針變量類比,char *argv[]和char **argv它倆有等價(jià)的效果。
聯(lián)系客服