可變引數問題

2021-06-22 15:58:04 字數 896 閱讀 4146

c語言中可變引數列表是通過巨集實現的,定義在stdarg.h中,

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_end(arg_ptr):清空引數列表,並置引數指標arg_ptr無效。

也就是說,arg_ptr是乙個指標,指向可變引數列表

va_start巨集使arg_ptr指向可變引數列表的第乙個可變引數,即省略號所代表的第乙個引數

va_arg巨集 返回arg_ptr所值引數的值,其型別由type決定

va_end用於使arg_ptr無效,用在最後

例子:

#include#includeint add(int pre,...)  //求和函式

while (nargvalue != 0); //自定義結束條件是輸入引數為0

可變引數過載的問題

1.可變引數相當於傳陣列引數,引數為0相當於陣列為空 2.當可變引數方法過載的時候,如果實際傳參為0個,編譯將不通過 無法分辨呼叫的哪個方法 package com.yjq.cn.initialize 可變引數 public class varargstest system.out.println ...

可變引數列印 解析可變引數

1.的一般用法 define str s s define cons a,b int a e b int main 2.接受,列印可變引數 參考 glibc庫的bebug函式 define printf fmt,args.printf fmt,args 使用方法 define pr debug fm...

python基礎 引數傳遞問題和可變不可變型別

在python中,函式的引數傳遞是 值傳遞 還是 引用傳遞 加引號是因為python中關於引數傳遞不這麼講,但個人覺得可以這麼去理解 要看傳入引數是可變還是不可變物件,當傳入可變物件時即為 引用傳遞 傳入的為不可變物件則是 值傳遞 如下 x 1,2,3 可變引數 print x x 1,2,3 de...