c語言變參數,c語言參數和變量

本文目錄一覽:

c語言 怎麼寫 可變 參數函數

#include stdarg.h          //可變參數函數必要的頭文件

#include stdio.h

long int sum(unsigned int argc,…)    //可變參數函數必須包含至少一個確定的參數

{

long int srt=0;

int va;

unsigned int i;

va_list vl;                        //用於指向可變參數列表

va_start(vl,argc);                 //初始化,va_start()調用的第一個參數是所編寫的可變參數函數的最後一個確定的參數

for (i = 0; iargc; i++) {

srt+=(int)va_arg(vl,int);      //從參數列表按提取一個int類型的值參與相加運算

}

va_end(vl);                        //清理

return srt;

}

int main(int argc, char* argv[])

{

printf(“%ld\n”,sum(3,1,2,3));

return 0;

}

c語言中函數可否改變參數值

#include

void

foo(int

x,

int

y,

int

z)

{

printf(”x

=

%d

at

[%x]n”,

x,

x);

printf(”y

=

%d

at

[%x]n”,

y,

y);

printf(”z

=

%d

at

[%x]n”,

z,

z);

}

int

main(int

argc,

char

*argv[])

{

foo(100,

200,

300);

return

0;

}

運行結果:

x

=

100

at

[bfe28760]

y

=

200

at

[bfe28764]

z

=

300

at

[bfe28768]

c程序棧底為高地址,棧頂為低地址,因此上面的實例可以說明函數參數入棧順序的確是從右至左的。可到底為什麼呢?查了一直些文獻得知,參數入棧順序是和具體編譯器實現相關的。比如,pascal語言中參數就是從左到右入棧的,有些語言中還可以通過修飾符進行指定,如visual

c++.即然兩種方式都可以,為什麼c語言要選擇從右至左呢?

進一步發現,pascal語言不支持可變長參數,而c語言支持這種特色,正是這個原因使得c語言函數參數入棧順序為從右至左。具體原因為:c方式參數入棧順序(從右至左)的好處就是可以動態變化參數個數。通過棧堆分析可知,自左向右的入棧方式,最前面的參數被壓在棧底。除非知道參數個數,否則是無法通過棧指針的相對位移求得最左邊的參數。這樣就變成了左邊參數的個數不確定,正好和動態參數個數的方向相反。

因此,c語言函數參數採用自右向左的入棧順序,主要原因是為了支持可變長參數形式。換句話說,如果不支持這個特色,c語言完全和pascal一樣,採用自左向右的參數入棧方式

c語言可變參數是幹什麼的

可變參數是用於調用函數時,不知道參數的個數及類型的一種場合,最經典最常用的是

int

printf(const

char

*format[,

argument,

…]);

它後面的參數類型及數量都是可變的

printf(“%d”,x);

//一個int參數

printf(“%d%d%s\n”,x,y,z);

//三個參數,前兩個為int,後面的為char

*

原創文章,作者:EFIJ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/135379.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
EFIJ的頭像EFIJ
上一篇 2024-10-04 00:12
下一篇 2024-10-04 00:12

相關推薦

  • int類型變量的細節與注意事項

    本文將從 int 類型變量的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變量進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變量。 一、定義與聲明 int…

    編程 2025-04-29
  • 三星內存條參數用法介紹

    本文將詳細解釋三星內存條上面的各種參數,讓你更好地了解內存條並選擇適合自己的一款。 一、容量大小 容量大小是內存條最基本的參數,一般以GB為單位表示,常見的有2GB、4GB、8GB…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python input參數變量用法介紹

    本文將從多個方面對Python input括號里參數變量進行闡述與詳解,並提供相應的代碼示例。 一、基本介紹 Python input()函數用於獲取用戶輸入。當程序運行到inpu…

    編程 2025-04-29
  • Spring Boot中發GET請求參數的處理

    本文將詳細介紹如何在Spring Boot中處理GET請求參數,並給出完整的代碼示例。 一、Spring Boot的GET請求參數基礎 在Spring Boot中,處理GET請求參…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python Class括號中的參數用法介紹

    本文將對Python中類的括號中的參數進行詳細解析,以幫助初學者熟悉和掌握類的創建以及參數設置。 一、Class的基本定義 在Python中,通過使用關鍵字class來定義類。類包…

    編程 2025-04-29
  • Hibernate日誌打印sql參數

    本文將從多個方面介紹如何在Hibernate中打印SQL參數。Hibernate作為一種ORM框架,可以通過打印SQL參數方便開發者調試和優化Hibernate應用。 一、通過配置…

    編程 2025-04-29

發表回復

登錄後才能評論