您好,登錄后才能下訂單哦!
這篇文章主要講解了“argc,argv和C/C++易錯題分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“argc,argv和C/C++易錯題分析”吧!
argc即argument count. 顧名思義,是用戶在命令行內輸入的參數個數。
argv即argument vector. 是用戶輸入的參數vector庫(數組)
int main(int argc ,char *argv[])
char *argv[] 即指針數組([]優先級別高于*,于是就里面的每個元素都是char*類型,要理解好 char (*argv)[] 和 char *argv[]的區別),每一個元素內,存的都是參數,這些參數都是字符串。其實就是vector庫。如果你這里暫時不理解,沒關系,往下看。
它其實就是記錄了程序被執行時所傳入的參數。包括打開程序的那條語句。如我保存了一個程序為test.exe, 在命令行執行這個程序并順便帶幾個參數:
test.exe x y z
這樣的話argc就是四個參數,分別為text.exe、x、y、z. 輸出的話將是這樣的:
代碼:
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
cout << "參數個數是: " << argc << endl << "分別是:" << endl;
for (int i = 0; i < argc; ++i)
cout << argv[i] << endl;
return 0;
}
可見它其實就是將參數存在argv這個vector庫)內,你想輸出的話可以直接輸出這些參數。
理清楚優先級別:
1.
int x,y,z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
其中:
z=x++,y++,++y;
這是逗號表達式,最終結果為最后一個數。這么說你可能會以為答案是2,2,3.
但實際上不是的,這里不是z=(x++,y++,++y);如果是這樣的才是2,2,3.
所以正確答案應該是2,3,1.
2.
設a、b、c、d、m、n均為int型變量,且a=5、b=6、c=7、d=8、m=2、n=1,則邏輯表達式(m==a<b)&&(n==c<d) 的值為__.
你或許會以為是1,但實際上大小號的優先級別大于==號,所以答案應該是0
小心取整問題
假定x和y為double型,則表達式(x=2,y=x+5/2)的值是__C__ 。
你或許會以為答案是4.500000,但是5/2會自動向下取整,所以真實答案是4.000000.
static局部變量只被初始化一次,下一次依據上一次結果值
#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,我不想排版太難看,所以還是自己腦補空格變換行吧!
小心宏定義
#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。原因是什么呢?因為宏定義只是單純的替換而已。其實b=a+1*a+1=7.
感謝各位的閱讀,以上就是“argc,argv和C/C++易錯題分析”的內容了,經過本文的學習后,相信大家對argc,argv和C/C++易錯題分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。