從實現可變參函式程式設計走入鏈式棧

2021-06-19 01:51:28 字數 1607 閱讀 1824

可變參函式有比較重要意義,例如我們常用的printf()函式就使用了這一技術,當然我們這次

用的技術不是實現printf()所用到的。可變參函式其實可以借用

鏈式棧實現,我們將要傳的引數

放到棧中,把棧作為引數進行傳遞,利用棧先進後出的特點,

可以用鏈式棧實現

較為簡單的

可變參函式。

//本程式用鏈式棧實現可變參函式程式設計

//為了方便在main函式傳遞引數,規定eletype中:1代表int ,2代表char

#include #include #include typedef struct stacklink

stacklink;

//全域性變數popele

stacklink *popele;

//以下是函式宣告

stacklink *createstacklink(int eletype , void *elevalue );

void pushstacklink(stacklink *head , int eletype , void *elevalue);

stacklink *popstacklink(stacklink *head);

void printfstacklink(stacklink *head);

stacklink *getstacklinktail(stacklink *head , int flag);

int main()//主要用於測試

stacklink *createstacklink(int eletype ,void *elevalue)

void pushstacklink(stacklink *head , int eletype , void *elevalue)

stacklink *getstacklinktail(stacklink *head , int flag)

else if(flag == 2)

else

return tail;

}void printfstacklink(stacklink *head)

else if(head ->eletype == 2)

else

head = head ->next;

} printf("\n\n");

}stacklink *popstacklink(stacklink *head)

newtail = getstacklinktail(head , 2);

popele = newtail ->next;

printf("彈出的元素如下\n");

if(popele ->eletype == 1)

printf("型別是int , 值是%d\n",*(int *)popele ->elevalue);

else if(popele ->eletype == 2)

printf("型別是char ,值是%s\n",(char*)popele ->elevalue);

else

newtail ->next = null;

printf("\n\n");

return newtail;

}

C語言可變參函式的實現

函式是大多數程式語言都實現的程式設計要素,呼叫函式的實現原理就是 執行跳轉 引數傳遞。對於執行跳轉,所有的cpu都直接提供跳轉指令 對於引數傳遞,cpu會提供多種方式,最常見的方式就是利用棧來傳遞引數。c語言標準實現了函式呼叫,但是卻沒有限定實現細節,不同的c編譯器廠商可以根據底層硬體環境自行確定實...

可變引數 函式 可變參列表 2) 實現小型日誌檔案

va list arg ptr 定義乙個指向個數可變的引數列表指標 va start arg ptr,argn 使引數列表指標arg ptr指向函式引數列表中的第乙個可選引數,說明 argn是位於第乙個可選引數之前的固定引數,或者說,最後乙個固定引數 之前的乙個引數 函式引數列表中引數在記憶體中的順...

函式式程式設計與建構函式結合實現鏈式呼叫

js部分 簡易的鏈式呼叫框架 要點 1.框架主體以函式式程式設計為核心 2.輔以建構函式原型鏈實現鏈式呼叫 注意 在鏈式呼叫過程中,始終有乙個值是從傳入,到最後終止鏈式時,一直變化,在此例中這個值就為this.wrap,其伴隨整個過程 function root this.wrap wrap cha...