你是指參數(shù)的個(gè)數(shù)可以變化? 比如文件操作函數(shù)fpritnf,它的參數(shù)是不確定的,可以是fprintf("%s%s","你好","他好");也可以是fprintf("%s%d%c","字符串",10086,'c'); 如果自己寫(xiě)一個(gè)參數(shù)變化的函數(shù)的話,呵呵,我沒(méi)試過(guò)。
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、楚雄州ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的楚雄州網(wǎng)站制作公司
在C語(yǔ)言中,函數(shù)中要用數(shù)組做參數(shù),可以采用三種方式,其中后兩種均可適用于變長(zhǎng)數(shù)組參數(shù)。
1 直接以定長(zhǎng)數(shù)組做參數(shù),聲明形式為:
ret_type func(int a[100]);
這里就是以100個(gè)元素的數(shù)組做參數(shù)的。
2 聲明時(shí)不帶長(zhǎng)度,即:
ret_type func(int a[]);
3 以指針替代數(shù)組,即:
ret_type func(int *a);
2,3兩種均可以用于變長(zhǎng)數(shù)組。不過(guò)這種情況下,需要與函數(shù)約定數(shù)組長(zhǎng)度的確定方法,比如約定規(guī)模 ,約定結(jié)束值,增加額外參數(shù)傳長(zhǎng)度,在數(shù)組元素中包含長(zhǎng)度,或采用全局變量傳長(zhǎng)度等等。
按照你現(xiàn)在給出的代碼,
print2(3, 100, 1, 2, 3);
輸出的是1 2 3加上一位不確定值
因?yàn)関a_start(vl, n);這一步理論上可以得到以a開(kāi)頭的va_list指針,但實(shí)際上由于編譯器優(yōu)化,它的效果和va_start(vl, a);是相同的
這一點(diǎn),你可以打印出指針地址來(lái)確定一下
從你的代碼推測(cè),你是想讓print2打印出后四個(gè)參數(shù),包括a在內(nèi)
即 100 1 2 3
如果是這樣 可以用另一種方式做到
print2中,不要調(diào)用va_start
而是直接 vl=a;
如下
void print2(int n, int a, ...)
{
va_list vl;
// va_start(vl, n);//使用倒數(shù)第二個(gè)有名變量
vl = a;//編譯器想優(yōu)化 不讓。 直接強(qiáng)勢(shì)插入
vprint(n+1, vl);
va_end(vl);
}
可以試一下是否是你需要的效果。 如果不是 再追問(wèn)