溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

argc,argv和C/C++易錯(cuò)題分析

發(fā)布時(shí)間:2021-11-29 14:49:47 來源:億速云 閱讀:156 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“argc,argv和C/C++易錯(cuò)題分析”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“argc,argv和C/C++易錯(cuò)題分析”吧!

argc即argument count. 顧名思義,是用戶在命令行內(nèi)輸入的參數(shù)個(gè)數(shù)。

argv即argument vector. 是用戶輸入的參數(shù)vector庫(數(shù)組)

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

char *argv[] 即指針數(shù)組([]優(yōu)先級別高于*,于是就里面的每個(gè)元素都是char*類型,要理解好 char (*argv)[] 和 char *argv[]的區(qū)別),每一個(gè)元素內(nèi),存的都是參數(shù),這些參數(shù)都是字符串。其實(shí)就是vector庫。如果你這里暫時(shí)不理解,沒關(guān)系,往下看。

它其實(shí)就是記錄了程序被執(zhí)行時(shí)所傳入的參數(shù)。包括打開程序的那條語句。如我保存了一個(gè)程序?yàn)閠est.exe, 在命令行執(zhí)行這個(gè)程序并順便帶幾個(gè)參數(shù):

test.exe x y z

這樣的話argc就是四個(gè)參數(shù),分別為text.exe、x、y、z. 輸出的話將是這樣的:

代碼:

#include <iostream>

using namespace std;

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

cout << "參數(shù)個(gè)數(shù)是: " << argc << endl << "分別是:" << endl;

for (int i = 0; i < argc; ++i)

cout << argv[i] << endl;

return 0;

}

argc,argv和C/C++易錯(cuò)題分析

可見它其實(shí)就是將參數(shù)存在argv這個(gè)vector庫)內(nèi),你想輸出的話可以直接輸出這些參數(shù)。

理清楚優(yōu)先級別

1.

int x,y,z;

x=y=1;

z=x++,y++,++y;

printf("%d,%d,%d\n",x,y,z);

其中:

z=x++,y++,++y;

這是逗號表達(dá)式,最終結(jié)果為最后一個(gè)數(shù)。這么說你可能會(huì)以為答案是2,2,3.

但實(shí)際上不是的,這里不是z=(x++,y++,++y);如果是這樣的才是2,2,3.

所以正確答案應(yīng)該是2,3,1.

2.

設(shè)a、b、c、d、m、n均為int型變量,且a=5、b=6、c=7、d=8、m=2、n=1,則邏輯表達(dá)式(m==a<b)&&(n==c<d) 的值為__.

你或許會(huì)以為是1,但實(shí)際上大小號的優(yōu)先級別大于==號,所以答案應(yīng)該是0

小心取整問題

假定x和y為double型,則表達(dá)式(x=2,y=x+5/2)的值是__C__ 。

你或許會(huì)以為答案是4.500000,但是5/2會(huì)自動(dòng)向下取整,所以真實(shí)答案是4.000000.

static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值

#include <iostream>

using namespace std;

int f(int a)

{

int b = 0;

static int c = 3;

b++; c++;

return(a + b + c);

}

int main()

{

int a = 2, i;

for (i = 0; i<3; i++) printf("%d\n", f(a));

return 0;

}

答案是7 8 9,我不想排版太難看,所以還是自己腦補(bǔ)空格變換行吧!

小心宏定義

#include <stdio.h>

#define ABC(x) x*x

int main()

{

int a = 3, b;

b = ABC(a + 1);

printf("b = %d \n", b);

return 0;

}

這里的答案是7。原因是什么呢?因?yàn)楹甓x只是單純的替換而已。其實(shí)b=a+1*a+1=7.

感謝各位的閱讀,以上就是“argc,argv和C/C++易錯(cuò)題分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對argc,argv和C/C++易錯(cuò)題分析這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI