C++中int?main(int?argc,?char**?argv)的參數(shù)使用
int main(int argc, char** argv) 是 C 和 C++ 程序的入口點(diǎn),其中 argc 和 argv 是用來(lái)接收從命令行傳遞給程序的參數(shù)的。下面我將詳細(xì)解釋這兩個(gè)參數(shù)的含義,并給出一個(gè)例子來(lái)幫助理解。
參數(shù)解釋
int argc:argc是 "argument count" 的縮寫(xiě),表示傳遞給程序的命令行參數(shù)的數(shù)量。它至少為 1,因?yàn)槊钚猩峡偸侵辽儆幸粋€(gè)參數(shù):程序的名稱(chēng)。
char** argv或char *argv[]:argv是 "argument vector" 的縮寫(xiě),是一個(gè)指向字符指針數(shù)組的指針。每個(gè)元素
argv[i]都是一個(gè)指向 C 字符串的指針,這個(gè)字符串包含了第i個(gè)命令行參數(shù)。按照慣例,
argv[0]是程序的名稱(chēng)。argv數(shù)組以 NULL 指針結(jié)束,但這個(gè) NULL 指針通常不包含在argc計(jì)數(shù)之內(nèi)。
舉例說(shuō)明
假設(shè)你有以下 C++ 程序:
#include <iostream>
int main(int argc, char** argv) {
std::cout << "Program name: " << argv[0] << std::endl;
for (int i = 1; i < argc; ++i) {
std::cout << "Argument " << i << ": " << argv[i] << std::endl;
}
return 0;
}如果你將這個(gè)程序編譯為 my_program 并從命令行運(yùn)行它,如下所示:
./my_program hello world 123
Program name: ./my_program Argument 1: hello Argument 2: world Argument 3: 123
在這個(gè)例子中:
argc的值是 4,因?yàn)橛兴膫€(gè)參數(shù):程序名(./my_program)和三個(gè)用戶(hù)提供的參數(shù)(hello,world,123)。argv[0]指向字符串"./my_program"。argv[1]指向字符串"hello"。argv[2]指向字符串"world"。argv[3]指向字符串"123"。注意這里沒(méi)有
argv[4],因?yàn)閿?shù)組索引是從 0 開(kāi)始的,并且在這個(gè)例子中只有四個(gè)元素。訪(fǎng)問(wèn)argv[4]會(huì)導(dǎo)致未定義行為,因?yàn)樗隽藬?shù)組的邊界。實(shí)際上,按照 C 和 C++ 的標(biāo)準(zhǔn),argv數(shù)組并不保證以 NULL 指針結(jié)束,盡管在某些系統(tǒng)上可能是這樣。你應(yīng)該總是依賴(lài)argc來(lái)確定參數(shù)的數(shù)量。
基于OCCT的例子:
這是一個(gè)簡(jiǎn)單的C++程序,它用于讀取STEP文件并將其內(nèi)容轉(zhuǎn)換為另一種格式。
#include <STEPControl_Reader.hxx>
?
int main(int argc, char** argv)
{
// Read from file.
TopoDS_Shape shape;
//
if ( argc > 1 )
{
STEPControl_Reader readerBase;
readerBase.ReadFile(argv[1]);
std::cout << readerBase.TransferRoots() << "Base roots transferred" << std::endl;
}
else
{
std::cout << "Please, pass filename (STEP) as an argument." << std::endl;
return 1;
}
?
return 0;
}
?char** argv與char* argv[]區(qū)別
- 指針是個(gè)地址。
- char *a: a的值包含字符型數(shù)據(jù),取消對(duì)a的引用 (*a) 得到一個(gè)字符,不取消引用得到一個(gè)字符串,printf("%c",*a) 輸出一個(gè)字符或者 printf("%s",a)輸出字符串;
- char **a: a的值包含一個(gè)地址,該地址包含字符字符型數(shù)據(jù),取消對(duì)a的引用(*a),得到該地址,再取消對(duì)該地址的引用(**a),得到一個(gè)字符,printf("%c",**a) 輸出一個(gè)字符 printf("%s",*a) 輸出字符串;
- char *a[]: a是一個(gè)數(shù)組,數(shù)組的元素是地址(地址其實(shí)就是指針),地址包含的值是字符型數(shù)據(jù),printf("%c",*a[i]) 輸出一個(gè)字符,printf("%s",a[i])) 輸出字符串;
- char *a或char **a可以改變a的值,char a*[]不能改變a的值。
到此這篇關(guān)于C++中int main(int argc, char** argv)的參數(shù)使用的文章就介紹到這了,更多相關(guān)C++ int main(int argc, char** argv)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt5.14.2使用虛擬鍵盤(pán)的關(guān)鍵代碼
對(duì)于Qwidget程序,使用qtvirtualkeyboard彈出鍵盤(pán)之后,鍵盤(pán)會(huì)浮于表面。使用VirtualkeyboardPushView模塊,自動(dòng)根據(jù)情況把輸入視圖往上面推移,這篇文章主要介紹了Qt5.14.2使用虛擬鍵盤(pán)的關(guān)鍵代碼,需要的朋友可以參考下2022-09-09
詳解C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之棧
這篇文章主要為大家介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之棧,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01
Opencv使用Stitcher類(lèi)圖像拼接生成全景圖像
這篇文章主要為大家詳細(xì)介紹了Opencv使用Stitcher類(lèi)圖像拼接生成全景圖像,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Qt實(shí)現(xiàn)制作簡(jiǎn)單的計(jì)算器
計(jì)算器是我們生活中很常見(jiàn)的東西,它可以由多種語(yǔ)言多種方式來(lái)實(shí)現(xiàn)。本文主要介紹的是利用Qt實(shí)現(xiàn)的簡(jiǎn)易計(jì)算器的制作,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-12-12
C++ 字符串string和整數(shù)int的互相轉(zhuǎn)化操作
這篇文章主要介紹了C++ 字符串string和整數(shù)int的互相轉(zhuǎn)化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
Matlab實(shí)現(xiàn)統(tǒng)計(jì)集合中各元素出現(xiàn)次數(shù)的示例代碼
統(tǒng)計(jì)數(shù)組中各個(gè)元素?cái)?shù)量是一個(gè)很常用的功能,本文主要為大家介紹了如何利用Matlab優(yōu)雅的統(tǒng)計(jì)集合中各元素出現(xiàn)的次數(shù),感興趣的可以了解一下2022-05-05
C++中vector的模擬實(shí)現(xiàn)實(shí)例詳解
vector是表示可變大小數(shù)組的序列容器,它也采用連續(xù)存儲(chǔ)空間來(lái)存儲(chǔ)元素,因此可以采用下標(biāo)對(duì)vector的元素進(jìn)行訪(fǎng)問(wèn),這篇文章主要給大家介紹了關(guān)于C++中vector模擬實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2021-11-11
C++ xxx_cast實(shí)現(xiàn)轉(zhuǎn)換代碼實(shí)例解析
這篇文章主要介紹了C++xxx_cast轉(zhuǎn)換代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07

