學點C語言(40):函數

來源:互聯網
上載者:User

像 printf 這種多參函數,是借用 stdarg.h 中的宏實現的.

va_list : 用於定義遍曆參數列表的指標;
va_start : 讓指標指向第一個參數;
va_arg  : 擷取下一個參數,並向後移動一個位置;
va_end  : 釋放指標,完成遍曆.

1. 整數求和:

本例實現了對系列整數求和,要求至少要有三個參數,並且最後一個必須是 0.

最後的 0 用於識別列表結束.

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

int sum(int n1,int n2,...)
{
  /* 定義一個指向參數列表的指標,必須是 va_list 類型 */
  va_list p;

  /* 定義輸出變數,並先擷取前兩個值 */
  int out = n1 + n2;

  /* 把指標指向最後一個明確的變數 */
  va_start(p,n2);

  /* 用 va_arg 擷取下一個整數值,va_arg 會同時把指標向後移動整數大小的位置 */
  /* 本例是假定參數都是整數值,遇 0 終止; 這樣在使用是最後一個參數必須是 0 */
  while ((n2 = va_arg(p,int)) != 0) out += n2;

  /* 結束 */
  va_end(p);

  return(out);
}

int main(void)
{
  printf("%d\n",sum(2,2,2,0));       /* 6 */
  printf("%d\n",sum(1,2,3,4,5,6,7,8,9,0)); /* 45 */
  getchar();
  return 0;
}

2. 整數求和(修改版):

這個函數要求至少要兩個參數,最後必須是 0.

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

int sum(int n1,...)
{
  va_list p;
  int out = n1;
  va_start(p,n1);
  while ((n1 = va_arg(p,int)) != 0) out += n1;
  va_end(p);
  return(out);
}

int main(void)
{
  printf("%d\n",sum(2,0));         /* 2 */
  printf("%d\n",sum(1,2,3,4,5,6,7,8,9,0)); /* 45 */
  getchar();
  return 0;
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.