[原]變參函數原理詳解

/*
變參函數原理說明:
va_start就是求得第一個可變參的地址.
下面幾個宏的作用:保是來確定可變參數的列表中每個參數的地址.

實現變參函數的要點,就是想辦法取得每個參數的地址.
*/

#include
<stdio.h>
#include
<stdarg.h>

#if 0
#define va_list void*
#define va_arg(arg, type) *(type*)arg; arg = (char*)arg + sizeof(type);
#define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start))
#endif

int sum(int nr, ...)
{
int i = 0;
int result = 0;
va_list arg
= NULL;//定義一個變量
//va_start的作用卻實是將第一個變量的址址給arg.
va_start(arg, nr); //將第一個變量的地址給arg

for(i = 0; i < nr; i++)
{
result
+= va_arg(arg, int);
}
return result;
}

int main(int argc, char* argv[])
{
printf(
"%d\n", sum(4, 100,100,100,100));
printf(
"%d\n", sum(3, 200, 200, 200));

return 0;
}

___________________________________________

第二次程序:

#include <stdio.h>
void fun1(char *fmt,...)
{
char **lst;

printf(
"fun1\n" );
lst
= (char *)&fmt+sizeof(char *);

printf(
" the parameter is [%s]\n",*lst);
}
void fun2(int a,...)
{
char *lst;

printf(
"fun2\n" );
lst
= (char *)&a+sizeof(int);
printf(
" the parameter is [%d]\n",*lst);
}

int main(void)
{
fun1(
"hello","world");
fun2(
1, 2, 3, 4);

return 0;
}

轉載于:https://www.cnblogs.com/hnrainll/archive/2011/08/05/2128632.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277055.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277055.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277055.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Web服務器的配置方法

Web服務器的配置方法 一、 安裝IIS 1. 進入[控制面板]-[新增/移除Windows元件]&#xff0c;勾選Internet Information Servers(IIS)如圖&#xff0c;在安裝過程中需要插入windows操作系統光盤2. 建立虛擬目錄 右擊[我的電腦]--管理&#xff0c;找到[…

2018年開發者生態體系狀態調查報告(第一部分)

在2018年年初&#xff0c;jetbrains公司通過調查6000名開發者來了解開發者的生態狀態&#xff0c;最近&#xff0c;調查結果終于整理完畢&#xff0c;以下是得出的結果。一、 日常工作1.1&#xff09;流行語言&#xff1a;今年&#xff0c;使用最受歡迎、最常用與最有前途的語言…

面向對象三大基本特性,五大基本原則

透切理解面向對象三大基本特性是理解面向對象五大基本原則的基礎. 三大特性是&#xff1a;封裝,繼承,多態 所謂封裝&#xff0c;也就是把客觀事物封裝成抽象的類&#xff0c;并且類可以把自己的數據和方法只讓可信的類或者對象操作&#xff0c;對不可信的進行信息隱藏。封裝是…

人事薪資管理系統V1.00功能簡介(適用于工廠)c#.net+SQL Server2000

1. 統計管理1.1 工廠員工綜合統計1.2 按月統計生產訂單總金額1.3 按月統計員工工資1.4 按月統計員工計件工資1.5 員工生日排行榜2. 人事管理2.1 增加員工信息2.2 上傳或更換員工照片2.3 確認員工基本薪資&#xff08;含包月&#xff0c;計件&#xff0c;計…

運維工程師主要工作是做什么?

總結兩句話&#xff1a; 1、保障業務長期穩定運行&#xff08;如網站服務器、游戲服務器等&#xff09;。 2、保障數據安全可靠&#xff08;如用戶名密碼、游戲數據、博客文章、交易數據等&#xff09;。 由這兩句話推演運維工程師要學些什么&#xff1f; 一、保障業務長期穩定…

python3.7 安裝cx_Freeze

遇到的問題簡單描述&#xff1a; 1&#xff0c;直接 pip install cz_freeze 安裝失敗 2&#xff0c;pip cx_Free-*.*.*.tar.gz 安裝失敗 解決辦法&#xff1a; 1&#xff0c;下載 cx_Freeze-5.1.1-cp37-cp37m-win_amd64.whl &#xff08;地址&#xff1a;https://www.lfd.uci…

SiteMesh參考

SiteMesh參考 作者&#xff1a;kongxx (kongxxgmail.com)安裝 首先從sitemesh下載安裝包&#xff0c;這里使用的是2.2.1版本。 創建一個Web應用程序&#xff0c;這里我創建一個名為myapp的Web應用程序&#xff1b; 復制sitemesh-2.2.1.jar文件到{myapp}/WEB-INF/lib目錄下&am…

精通Spring Boot——第十一篇:使用自定義配置

2019獨角獸企業重金招聘Python工程師標準>>> 今天這篇文章給大家介紹自定義配置的兩種方式 第一式&#xff1a; 使用ConfigurationProperties&#xff0c;且看代碼 package com.developlee.customconfig.config;import org.springframework.boot.context.properties…

MySQL 高可用架構在業務層面的應用分析

MySQL 高可用架構在業務層面的應用分析 http://mp.weixin.qq.com/s?__bizMzAxNjAzMTQyMA&mid208312443&idx1&snf9a0d03dd9a1cf3b3575c0241291e421&scene22&srcidseLU5tmZumKLzwVBIHzM#rd http://mp.weixin.qq.com/s?__bizMzAxNjAzMTQyMA&mid20831244…

使用Expresso學習.net正則表達式

什么是RE?想必各位大大在做文件查找的時侯都有使用過萬用字符”*”&#xff0c;比如說想查找在Windows目錄下所有的Word文件時&#xff0c;你可能就會用”*.doc”這樣的方式來做查找&#xff0c;因為”*”所代表的是任意的字符。RE所做的就是類似這樣的功能&#xff0c;但其功…

數據結構與算法學習筆記之 從0編號的數組

數據結構與算法學習筆記之 從0編號的數組前言數組看似簡單&#xff0c;但掌握精髓的卻沒有多少&#xff1b;他既是編程語言中的數據類型&#xff0c;又是最基礎的數據結構&#xff1b;一個小問題&#xff1a;為什么數據要從0開始編號&#xff0c;而不是 從1開始呢&#xff1f;正…

JAVA四種基本排序總結

JAVA四種基本排序,包括冒泡法,插入法,選擇法,SHELL排序法.其中選擇法是冒泡法的改進,SHELL排序法是 插入法的改進.所以從根本上來說可以歸納為兩種不同的排序方法:即:插入法&#xff06;冒泡法一 插入法:遍歷排序集合&#xff0c;每到一個元素時&#xff0c;都要將這個元素與所…

Windows 故障轉移+Hyper-V 虛機自動遷移高 可用

Windows 故障轉移Hyper-V 虛機自動遷移高 可用 Windows 故障轉移Hyper-V 虛機自動遷移高... 1一、系統原理... 31.1 高效率的 VMbus 架構... 31.2 完美支持 Linux 系統... 4二、架構拓樸... 52.1 網絡及系統架構拓樸... 52.2 域結構拓樸... 5三、實驗資源列表... 63.1 網絡設備…

MSSqlServer基礎學習01

1.新建登陸用戶名&#xff0c;須賦予數據庫訪問權限方可訪問已有的數據庫&#xff0c;可以參考如下圖片轉載于:https://www.cnblogs.com/MyVision/p/11242417.html

js,java時間處理

1.JS獲取時間格式為“yyyy-MM-dd HH:mm:ss”的字符串 function getTimeStr(){var myDate new Date();var year myDate.getFullYear(); //獲取完整的年份(4位,1970-????)var month myDate.getMonth(); //獲取當前月份(0-11,0代表1月)month month > 9 ? month : &quo…

框架和模式

1&#xff0e;什么是模式&#xff1f; 模式&#xff0c;即pattern。其實就是解決某一類問題的方法論。你把解決某類問題的方法總結歸納到理論高度&#xff0c;那就是模式。 Alexander給出的經典定義是&#xff1a;每個模式都描述了一個在我們的環境中不斷出現的問題&#xff0c…

人月神話第三章

對于效率和概念的完整性來說&#xff0c;最好由少數干練的人員來設計和開發&#xff0c; 而對于大型系統&#xff0c; 則需要大量的人手&#xff0c; 以使產品能在時間上滿足要求。 文章參照外科手術隊伍對10個人的編程隊伍進行專業化的角色分工。并為如何運作做出詳細說明。…

評上了7月份的Microsoft MVP

昨天晚上覺得困&#xff0c;于是躺到床上去休息了一會兒&#xff0c;沒想到醒來以后就發現了一封信&#xff0c;告訴我當選了7月份的MVP&#xff08;我們的Cat Chen也同樣當選了&#xff0c;園子里肯定還有其它朋友&#xff09;。自從去年9月份登陸博客園以來&#xff0c;寫技術…

javascript刪除數組,索引出現問題解決辦法。

var data [{ isRemove: 0, name: "項目1" },{ isRemove: 1, name: "項目2" },{ isRemove: 1, name: "項目3" },{ isRemove: 0, name: "項目4" },{ isRemove: 0, name: "項目5" },{ isRemove: 0, name: "項目6" }…

知識點 - 學習過程中積累

優化數據庫查詢訪問&#xff1a;使用存儲過程&#xff0c;利用連接池打開關閉數據庫&#xff1b;操作數據是&#xff0c;盡量避免裝箱&#xff1b;數據庫中為<NULL>的字段&#xff0c;sql語句中用is null讀取&#xff1b;開發復合控件的主要步驟&#xff1a;1&#xff09…