c語言如何在可變引數函式中使用,C語言如何在可變引數函式中使用printf

時間 2021-08-30 09:50:35

1樓:兔子和小強

如@psxf91所答,應使用v*系列的函式來實現。對比下printf與vprintf函式原型:

void printf(const char *format, ...);

void vprintf(const char *format, va_list ap);

可以看出二者的差別。vprintf才接收va_list型別,printf接收的是不定引數。

因此,要實現你的要求**如下:

#include "stdarg.h"

void fun(const char *fmt, ...)

2樓:匿名使用者

我記得有個函式叫vprintf,

用stdarg.h的巨集把va_list拿到

然後傳進去,即可。

3樓:匿名使用者

找到printf的原型,根據這個實現,一般可變引數用的比較少,能不實現就不要實現,以防以後遇到問題.解決起來麻煩!

4樓:儲貞拓跋凝蝶

你可以用字元指標作為函式的引數,自己在函式裡面設計乙個格式去讀這個指標指向的一串字元。

比如printf

,scanf

函式就是這樣的。函式引數就有字元指標。

例如printf("the

data

is%d",x);

字串"the

data

is%d"的首位址給了字元指標。

c語言如何定義乙個可變引數函式 如何呼叫其輸入的引數 分別

5樓:匿名使用者

有專門的巨集,處理可變參

void va_start( va_list arg_ptr, prev_param );

type va_arg( va_list arg_ptr, type );

void va_end( va_list arg_ptr );

乙個簡單的例子

void ******_va_fun(int i, ...)int main()

6樓:圭仁丘妍

傳值呼叫

和引用呼叫  傳值呼叫和引用呼叫指的是用於引數傳遞過程中的一種機制。傳值呼叫中,只使用了實參的值。傳值呼叫機制裡,形參是乙個區域性變數,其初始值為相應實參的值。

在引用呼叫機制裡,將實參的位址傳遞給形參,從表面上看是以實參變數取代形參,因此任何發生在形參上的改變實際上都發生在實參變數上。

形參的作用是實現主調函式與被調函式之間的聯絡,通常將函式所處理的資料,影響函式功能的因素或者函式處理的結果作為形參。沒有形參的函式在形參表的位置應該寫void.main

函式也可以有形參和返回值,其形參也稱為命令列引數,由作業系統在啟動程式時初始化,其返回值傳遞給作業系統。

形參和實參的對照例項(c語言版)  main()    ints(intn)

如何在乙個可變引數函式中呼叫另乙個可變引數函式

7樓:育知同創教育

無辦抄法直接做到這一點,不過可以採用襲其他方法實現,bai例如:首先,定義被du呼叫函式的引數zhi

為va_list型別,同時在dao呼叫函式中將可變長引數列表轉換為va_list,這樣就可以進行變長引數的傳遞了。看如下所示:

void subfunc (char *fmt, va_list argp)

void mainfunc (char *fmt, ...)這樣就ok了!

c語言中如何實現可變參函式

8樓:匿名使用者

c語言中可變參函式實現,主要通過va_list巨集及相關操作的幾個巨集。

一、涉及巨集及說明:

所有相關巨集均定義在stdarg.h中。

1、va_list: 可變引數列表指標。

2、va_start:獲取可變引數列表的第乙個引數的位址。

3、va_arg:獲取可變引數的當前引數,返回指定型別並將指標指向下一引數。

4、va_end:清空va_list可變引數列表。

可變參函式的實現,就是這四個巨集的使用。

二、**舉例:

在實際應用中,經常有獲取若干個數最大值的情況,當數量比較大的時候,一般通過陣列實現,但個數不多時,一般寫乙個max函式。 常規寫法都是用到幾個數的max,就寫幾個引數, 對此可以實現乙個可變引數函式,第乙個引數指定共計有多少資料,後續各個引數為要比較的值。

#include

#include

int max(int n, ...)//可變引數函式。

分別測試了1,2,3,4個數值,求取最大值的情況。

測試結果:1299

9樓:馬小芳

1、標準c庫的中的三個巨集的作用只是用來確定可變引數列表中每個引數的記憶體位址,編譯器是不知道引數的實際數目的。

2、在實際應用的**中,程式設計師必須自己考慮確定引數數目的辦法,如

⑴在固定引數中設標誌—— printf函式就是用這個辦法。

⑵在預先設定乙個特殊的結束標記,就是說多輸入乙個可變引數,呼叫時要將最後乙個可變引數的值設定成這個特殊的值,在函式體中根據這個值判斷是否達到引數的結尾。本文前面的**就是採用這個辦法.

無論採用哪種辦法,程式設計師都應該在文件中告訴呼叫者自己的約定。

3、實現可變引數的要點就是想辦法取得每個引數的位址,取得位址的辦法由以下幾個因素決定:

①函式棧的生長方向

②引數的入棧順序

③cpu的對齊方式

④記憶體位址的表達方式

結合源**,我們可以看出va_list的實現是由④決定的,_intsizeof(n)的引入則是由③決定的,他和①②又一起決定了va_start的實現,最後va_end的存在則是良好程式設計風格的體現,將不再使用的指標設為null,這樣可以防止以後的誤操作。

4、取得位址後,再結合引數的型別,程式設計師就可以正確的處理引數了。。

如何在ecel中使用rank函式排序

函小苼 首先,開啟需要修改的exce,然後選擇需要修改的資料,輸入rank公式即可排序。具體步驟如下 1 電腦開啟excel 2 電腦開啟excel 後,在排名中輸入公式 rank j11,j 11 j 14 j 11 j 14是所有成績單元格的絕對值,選中單元格後按f4就會變成絕對值。3 輸入公式...

EXCEL中如何在兩個表中使用函式做到多項匹配並返回相應值

a表的e列後插入一輔助列,即f列,原f列變為g列f1輸入公式 a1 b1 c1 d1 e1 b表h1輸入公式 vlookup a1 b1 c1 d1 e1,a表 f g,2,公式向下複製即可 在a表前面 a列 增加輔助列,其它列依次向右推。在輔助列 a列 輸入 b1 c1 d1 e1 f1 即連線要...

如何在html中使用圖示字型,如何在HTML中使用圖示字型

使用icon font來生成圖示相對於基於 的圖示來說,有如下的好處 1.自由的變化大小 2.自由的修改顏色 3.新增陰影效果 4.ie6也可以支援 5.支援 圖示的其它屬性,例如,透明度和旋轉等等6.可以新增text stroke和background clip text等屬性,只要瀏覽器支援 如...