c語言參數解析
A. c語言中主函數的參數有什麼作用
1.
main函數
是
程序
的入口函數,每次程序執行都是從main,很多地方main函數都會帶有參數:main
(int
argc,char
*argv[])
2.簡單的來說mian函數就是帶有兩個參數,第一個參數是一個
整型變數
,第二個參數是一個指向
字元串
的
指針數組
。
3.這里的參數由
操作系統
來調用,並給它們賦值。
4.現在的操作系統都是圖形化的,參數的調用基本都隱藏起來,不過可以藉助DOS來理解:
在
DOS操作系統
中輸入這樣的命令:C:>可執行文件名
參數參數……;
5.操作系統調用C語言的程序也是這樣調用的。第一個參數argc代表命令中參數的個數,文件名也算上。argv就是存儲這些參數的。
B. 在C語言里,參數是什麼意思
參數就是用來代替一個數的未知數
比如你定義時間,用t做參數
當你要計算路程vt(其中v設為常量),當要算一段時間的路程,只要用這個公式,再帶入一個t的值就可以了。
總之,參數就是一個符號,沒有實際意義,要讓他有實際意義,就給參數附一個值就可以了
形參就是沒有實際意義的參數
比如上面的t
實參就是有實際意義的參數
比如把上面的t賦值的那個常量
C. c語言中什麼是參數
如何寫可變參數的C函數以及這些可變參數的函數編譯器是如何實現的呢?下面是我為大家整理的關於c語言的參數介紹及使用,希望可以幫到大家哦。
簡單的可變參數的C函數
下面我們來探討如何寫一個簡單的可變參數的C函數.寫可變參數的C函數要在程序中用到以下這些宏:
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
va在這里是variable-argument(可變參數)的意思.
這些宏定義在stdarg.h中,所以用到可變參數的程序應該包含這個頭文件.下面我們寫一個簡單的可變參數的函數,改函數至少有一個整數參數,第二個參數也是整數,是可選的.函數只是列印這兩個參數的值.
void simple_va_fun(int i, ...)
{
va_list arg_ptr;
int j=0;
va_start(arg_ptr, i);
j=va_arg(arg_ptr, int);
va_end(arg_ptr);
printf(%d %dn, i, j);
return;
}
我們可以在我們的頭文件中這樣聲明我們的函數:
extern void simple_va_fun(int i, ...);
我們在程序中可以這樣調用:
simple_va_fun(100);
simple_va_fun(100,200);
從這個函數的實現可以看到,我們使用可變參數應該有以下步驟:
1)首先在函數里定義一個va_list型的變數,這里是arg_ptr,這個變數是指向參數的指針.
2)然後用va_start宏初始化變數arg_ptr,這個宏的第二個參數是第一個可變參數的前一個參數,是一個固定的參數.
3)然後用va_arg返回可變的參數,並賦值給整數j. va_arg的第二個參數是你要返回的參數的類型,這里是int型.
4)最後用va_end宏結束可變參數的獲取.然後你就可以在函數里使用第二個參數了.如果函數有多個可變參數的,依次調用va_arg獲取各個參數.
如果我們用下面三種 方法 調用的話,都是合法的,但結果卻不一樣:
1)simple_va_fun(100);
結果是:100 -123456789(會變的值)
2)simple_va_fun(100,200);
結果是:100 200
3)simple_va_fun(100,200,300);
結果是:100 200
我們看到第一種調用有錯誤,第二種調用正確,第三種調用盡管結果正確,但和我們函數最初的設計有沖突.下面一節我們探討出現這些結果的原因和可變參數在編譯器中是如何處理的.
可變參數在編譯器中的處理我們知道va_start,va_arg,va_end是在stdarg.h中被定義成宏的,由於1)硬體平台的不同 2)編譯器的不同,所以定義的宏也有所不同,下
面以VC++中stdarg.h里x86平台的宏定義摘錄如下(''號表示折行):
typedef char * va_list;
#define _INTSIZEOF(n)
((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t)
( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
D. C璇璦涓誨嚱鏁板悗闈㈢殑鐨勬嫭鍙烽噷鐨勫弬鏁版槸浠涔堟剰鎬濓紵
void琛ㄧず鍙傛暟涓虹┖錛屽嵆榪欎釜鍑芥暟涓嶅惈鍙傛暟錛屾瘮濡傚畾涔変竴涓猵rint鍑芥暟銆
紼嬪簭鎵ц屾繪槸浠main鍑芥暟寮濮嬶紝濡傛灉鏈夋湁鍏朵粬鍑芥暟錛屽垯瀹屾垚瀵瑰叾浠栧嚱鏁扮殑璋冪敤鍚庡啀榪斿洖鍒涓誨嚱鏁錛屾渶鍚庣敱main鍑芥暟緇撴潫鏁翠釜紼嬪簭銆傚湪鎵ц岀▼搴忔椂錛岀敱緋葷粺璋冪敤main鍑芥暟銆俶ain 鍑芥暟鏄鍦ㄧ▼搴忓惎鍔ㄤ腑瀹屾垚瀵瑰叿鏈夐潤鎬佸瓨鍌ㄦ湡鐨勯潪灞閮ㄥ硅薄鐨勫垵濮嬪寲涔嬪悗琚璋冪敤鐨勩傚畠鏄紼嬪簭鍦ㄦ湁瀹誇富 (hosted)鐜澧冿紙浜﹀嵆鏈夋搷浣滅郴緇燂級涓鎵鎸囧畾鐨勫叆鍙g偣銆傝嚜絝嬬▼搴忥紙鍚鍔ㄥ姞杞藉櫒錛鎿嶄綔緋葷粺鍐呮牳錛岀瓑絳夛級鐨勫叆鍙g偣鍒欐槸鐢卞疄鐜板畾涔夌殑銆
鎵╁睍璧勬枡錛
涓誨嚱鏁扮殑涓や釜褰㈠弬褰㈠紡涓鐨勫艦鍙傦紝鍏佽鎬粠鎵ц岀幆澧冧腑浼犻掍換鎰忕殑澶氬瓧鑺瀛楃︿覆錛堝畠浠閫氬父琚縐頒負鍛戒護琛屽弬鏁幫級錛屽悇涓鎸囬拡 argv.. argv[argc-1] 鎸囧悜姣忎釜榪欎簺瀛楃︿覆鐨勭涓涓瀛楃︺俛rgv[0] 鏄鎸囧悜涓涓琛ㄧず鐢ㄤ簬鎵ц岃ョ▼搴忚嚜韜鐨勫悕瀛楃殑絀虹粨灝懼氬瓧鑺傚瓧絎︿覆錛堟垨鑰呭綋鎵ц岀幆澧冧笉鏀鎸佹椂錛屼負絀哄瓧絎︿覆 ""錛夌殑寮澶村瓧絎︾殑鎸囬拡銆
榪欎簺瀛楃︿覆鏄鍙浠ユ敼鍔ㄧ殑錛岃櫧鐒跺瑰畠浠鐨勬敼鍔ㄥ苟涓嶄細琚浼犲洖緇欐墽琛岀幆澧冿細姣斿傚彲浠ョ敤 std::strtok 鏉ヤ嬌鐢ㄥ畠浠銆傜敱 argv 鎵鎸囧悜鐨勬暟緇勭殑澶у皬鑷沖皯涓 argc+1錛屽叾鏈鍚庝竴涓鍏冪礌 argv[argc] 淇濊瘉涓轟竴涓絀烘寚閽堛
E. c語言中argc和argv是什麼意思
argc 是 argument count的縮寫,表示argv這個二級指針指向的內存區域中保存的由stub寫入的有效命令行參數的個數.
argv 是 argument vector的縮寫,表示傳入main函數的參數序列或指針,並且第一個參數argv[0]一定是程序的名稱,並且包含了程序所在的完整路徑,所以確切的說需要輸入的main函數的參數個數是argc-1個。
(5)c語言參數解析擴展閱讀
argc和argv的使用:
#include<stdio.h>
int main(int argc,char *argv[])
{
if(argc==1||argc>2)
printf("請輸入想要編輯的文件名如:fillname");
if(argc==2)
printf("編輯%s ",argv[1]);
return 0;
}