真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語(yǔ)言函數(shù)不定類型參數(shù) c語(yǔ)言如何確定參數(shù)類型

C語(yǔ)言 麻煩幫寫個(gè)不定參數(shù)函數(shù)的程序

#include "stdarg.h"

創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營(yíng)銷、網(wǎng)站重做改版、澄城網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場(chǎng)景定制、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為澄城等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

//n表示輸入?yún)?shù),總的個(gè)數(shù),后面是各個(gè)元素的值

int va_add(int n,...)

{

va_list lst;

int i;

int t = 0;

va_start(lst,n);

for (i = 0; i n; i++)

{

int c = va_arg(lst, int);

printf("%d: %d\n", c);

t += c;

}

return t;

}

int main()

{

int t = va_add(4,1,2,3,4);

printf("Sum is:%d\n", t);

getch();

return 0;

}

如何定義不定參數(shù)函數(shù)

不定參數(shù)個(gè)數(shù) 傳遞時(shí)要指明其參數(shù)類型

還有文件包含庫(kù) 你也沒(méi)包含進(jìn)來(lái)~

#include stdarg.h //函數(shù)可變參數(shù)宏包含在此文件中(屬于C語(yǔ)言的標(biāo)準(zhǔn)庫(kù))

給你一個(gè)例子:

/*

功能名稱: aveage 通過(guò)可變參數(shù)宏來(lái)完成N個(gè)數(shù)的平均值計(jì)算

入口參數(shù): ParaNum 參數(shù)個(gè)數(shù) , ... 可能的參數(shù)

出口參數(shù): 平均值float

備注名稱:

日期版本:

*/

float average(int ParaNum,...);

float average(int ParaNum,...)

{

va_list va_Average;

int count;

long sum;

va_start(va_Average,ParaNum);//va_start 第二個(gè)參數(shù)為... 的前一個(gè)參數(shù)

for(count = 1;countParaNum;count++)

{

sum += (long)(va_arg(va_Average,int));

}

va_end(va_Average);

return (float)(sum/ParaNum);

}

不定參數(shù)傳遞的時(shí)候,是有標(biāo)準(zhǔn)庫(kù)的。

C語(yǔ)言怎么實(shí)現(xiàn)函數(shù)不定參數(shù)

C語(yǔ)言中定義了va_list, va_start( ), va_arg( ), va_end( ) 這樣一組宏來(lái)處理可變參數(shù)問(wèn)題。

可以參考printf的聲明,創(chuàng)建自己的實(shí)現(xiàn)函數(shù)。示例:

#includestdio.h

#includestdarg.h

void?va_fun(int?start,...)

{

va_list?arg_ptr;

int?nArgValue?=?start;

int?nArgCount?=?1;

va_start(arg_ptr,start);

while(nArgValue?!=?-1)

{

printf("arg?%d?is:%d/n",nArgCount,nArgValue);

nArgValue=va_arg(arg_ptr,int);

++nArgCount;?

}

return;?

}

main()

{

va_fun(5,1,7,-1);

printf("................/n");

va_fun(2,4,-1);

printf("................/n");

va_fun(-1);

printf("................/n");

//va_fun();?可變參數(shù)函數(shù)最少要有一個(gè)參數(shù)。

}

C語(yǔ)言中如何向同一函數(shù)傳不同類型的形參?

c語(yǔ)言沒(méi)有重載,c++有。

可以使用字符串傳遞原值和目標(biāo)值,增加類型定義參數(shù)。

int template(char *dst, char *src,int type)

{

int i_aa=0;

double d_bb=0.0L;

switch(type){

case 0: //整型

i_aa = atof(src);

i_aa = i_aa * 10;

sprintf(dst,"%d",i_aa);

break;

case 1: //浮點(diǎn)型

d_bb = atof(src);

d_bb = d_bb - 0.05;

sprintf(dst,"%.2lf",d_bb);

break;

case 2: //字符串

sprintf(dst,"this is %s",src);

break;

default:

return src;

}

return dst;

}

函數(shù)外再處理dst了。注意長(zhǎng)度定義。

c語(yǔ)言中的printf()這樣的有不定個(gè)參數(shù)的函數(shù)是如何實(shí)現(xiàn)的

首先先看到main函數(shù)中的不定參數(shù):

1.引用:在Turbo C2.0啟動(dòng)過(guò)程中, 傳遞main()函數(shù)三個(gè)參數(shù): argc, argv和env。

* argc: 整數(shù), 鴐ain()的命令行參數(shù)個(gè)數(shù)。

* argv: 字符串?dāng)?shù)組。

argv[0] 為程序運(yùn)行的全路徑名

argv[1] 為在DOS命令行中執(zhí)行程序名后的第一個(gè)字符串;

argv[2] 為執(zhí)行程序名后的第二個(gè)字符串;

...

argv[argc]為NULL。

*env: 字符串?dāng)?shù)組。env[] 的每一個(gè)元素都包含ENVVAR=value形式的字符

串。其中ENVVAR為環(huán)境變量。value 為ENVVAR的對(duì)應(yīng)值

#include stdlib.h

#include stdio.h

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

{

int i;

printf("%d\n", argc); /* 為什么它的輸出是 1, 它到底是定義什么的,我看不明上面的解釋*/

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

printf("argv[%d]:%s\n", i, argv[i]);

for(i=0; env[i]!=NULL; i++)

printf(" env[%d]:%s\n", i, env[i]);

}

argc, argv, env是在main()函數(shù)之前被賦值的,編譯器生成的可執(zhí)行文件,main()不是真正的入口點(diǎn),而是一個(gè)標(biāo)準(zhǔn)的函數(shù),這個(gè)函數(shù)名與具體的操作系統(tǒng)有關(guān)。

就想到其他函數(shù)是否能實(shí)現(xiàn)一樣的功能,查詢了相關(guān)資料,基本上都是利用STDARG.H中的

#define va_start(ap, parmN) (ap = ...)

#define va_arg(ap, type) (*((type *)(ap))++)

#define va_end(ap)

定義如下:

typedef char * va_list;

#define va_start _crt_va_start

#define va_arg _crt_va_arg

#define va_end _crt_va_end

#define _crt_va_start(ap,v) ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )

#define _crt_va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )

#define _crt_va_end(ap) ( ap = (va_list)0 )

修改他人程序如下:

void average(int first,...)

{int i=first;

va_list maker;

va_start(maker,first);

while(i!=-1){ printf("%p: %d\n",maker,i);

i=va_arg(maker,int);

}

}

void main(void)

{

average(2,3,4,4,-1);

}

運(yùn)行結(jié)果:

FFCE: 2

FFD0: 3

FFD2: 4

FFD4: 4

這個(gè)程序顯示函數(shù)參數(shù)的地址相差2個(gè)字節(jié)

所以可以改寫為:

void x(char *n,...)

{int *p;

p=n;

while(*p!=-1)

{printf("%p:%s\n",p,*p,*p);

p+=sizeof(char);}}

void main()

{x("g","hfd","gfg","vsds",-1);}

運(yùn)行結(jié)果:

FFD2:g

FFD4:hfd

FFD6:gfg

FFD8:vsds

不必通過(guò)宏va_start,va_arg,va_end實(shí)現(xiàn)

C語(yǔ)言,不定參數(shù)的函數(shù)指針問(wèn)題

很巧我現(xiàn)在正好也有實(shí)現(xiàn)這樣函數(shù)的需求,其實(shí)就是看了C語(yǔ)言可變參數(shù)函數(shù)的相關(guān)資料,你就差不多知道怎么實(shí)現(xiàn)了。

只不過(guò)其中有一個(gè)很重要的大坑,只要邁過(guò)去就沒(méi)問(wèn)題。我是試了半天才明白的:

如果參數(shù)是char或float類型,這樣的參數(shù)放在可變參數(shù)部分的話,編譯器是會(huì)默認(rèn)把它們的類型提升為相應(yīng)的“全”類型的:char提升為int,float提升為double。如果你沒(méi)注意這一點(diǎn)就會(huì)出現(xiàn)錯(cuò)誤。當(dāng)然可以通過(guò)指針的類型轉(zhuǎn)換來(lái)避免。

先簡(jiǎn)略地點(diǎn)一下,等我在CSDN博客里詳細(xì)地寫一寫心得吧。雖然是N年前的問(wèn)題估計(jì)樓主早就自己解決了,但希望能幫到其他人:)


當(dāng)前題目:c語(yǔ)言函數(shù)不定類型參數(shù) c語(yǔ)言如何確定參數(shù)類型
文章分享:http://weahome.cn/article/hhosec.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部