[cpp]view plain
copy
?#include
#include
using
namespace
std;
// 求若干數的平方和
//第乙個引數是引數的個數
double
pingfangsum(
inta,...)
va_end(var_arg); //清空引數列表,並置引數指標arg_ptr無效。
return
sum;
} int
main(
void
)
可變引數函式的原型宣告格式為:
type vafunction(type arg1, type arg2, … );
引數可以分為兩部分:個數確定的固定引數和個數可變的可選引數。函式至少需要乙個固定引數,固定引數的宣告和普通函式一樣;可選引數由於個數不確定,宣告時用"…"表示。固定引數和可選引數公同構成乙個函式的引數列表。
借助上面這個簡單的例,來看看各個va_***的作用。
va_list arg_ptr:定義乙個指向個數可變的引數列表指標;
va_start(arg_ptr, argn):使引數列表指標arg_ptr指向函式引數列表中的第乙個可選引數,說明:argn是位於第乙個可選引數之前的固定引數,(或者說,最後乙個固定引數;…之前的乙個引數),函式引數列表中引數在記憶體中的順序與函式宣告時的順序是一致的。如果有一va函式的宣告是void va_test(char a, char b, char c, …),則它的固定引數依次是a,b,c,最後乙個固定引數argn為c,因此就是va_start(arg_ptr, c)。
va_arg(arg_ptr, type):返回引數列表中指標arg_ptr所指的引數,返回型別為type,並使指標arg_ptr指向引數列表中下乙個引數。
va_copy(dest, src):dest,src的型別都是va_list,va_copy()用於複製引數列表指標,將dest初始化為src。
va_end(arg_ptr):清空引數列表,並置引數指標arg_ptr無效。說明:指標arg_ptr被置無效後,可以通過呼叫va_start()、va_copy()恢復arg_ptr。每次呼叫va_start() / va_copy()後,必須得有相應的va_end()與之匹配。引數指標可以在引數列表中隨意地來回移動,但必須在va_start() … va_end()之內。
可變引數函式
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 list 用來儲存巨集va start va arg和v...
可變引數函式
一 什麼是可變引數 我們在c語言程式設計中有時會遇到一些引數個數可變的函式,例如printf 函式,其函式原型為 int printf const char format,它除了有乙個引數format固定以外,後面跟的引數的個數和型別是可變的 用三個點 做引數佔位符 實際呼叫時可以有以下的形式 pr...
可變引數函式
stdarg.h是 c語言中c標準函式庫的 標頭檔案,stdarg是由standard 標準 arguments 引數 簡化而來,主要目的為讓函式能夠接收可變引數。stdarg.h 資料型別 型別名稱 描述 va list 用來儲存巨集va arg與巨集va end所需資訊 巨集名稱 描述va st...