本文目錄一覽:
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)) )
c語言主函數中的參數有什麼用?舉例說明
C語言的帶參數的main函數格式為main(int argc,char* argv[]),其中argc為參數個數加1,argv為參數列表,從argv[1]開始。編譯後生成可執行文件,可以在執行的程序後加參數,比如編譯一個程序為test.exe,則在執行時可以輸入:
test.exe 1 firestone
在這裡,argc等於3,argv[0]為”test.exe”,argv[1]為”1″,argv[2]為”firestone”。
如果有下面的程序:
#include stdio.h
void main(int argc,char *argv[])
{
printf(“You’ve input %d parameters.\n”,argc-1);
for(int i=1;iargc;i++)printf(“The No.%d is:%s\n”,i,argv[i]);
}
則上面的輸入會產生如下運行結果:
You’ve input 2 parameters.
The No.1 is 1
The No.2 is firestone
在C語言里,參數是什麼意思?
參數就是用來代替一個數的未知數
比如你定義時間,用t做參數
當你要計算路程vt(其中v設為常量),當要算一段時間的路程,只要用這個公式,再帶入一個t的值就可以了。
總之,參數就是一個符號,沒有實際意義,要讓他有實際意義,就給參數附一個值就可以了
形參就是沒有實際意義的參數
比如上面的t
實參就是有實際意義的參數
比如把上面的t賦值的那個常量
C語言里的參數是什麼意思?
c語言參數,就是我們每次用這個函數時,都對一些數做相同的工作,這些數我們就把它作為參數,如int
function(a,b){return
a
b:}.a和b都為參數,我們每次用到這個函數時都是求a,b的和,但每次用時根據不同的需求a.b的值會不同,但函數中對他們的操作總是不變。明白了吧
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/270674.html