91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言之 認識可變參數

發布時間:2020-08-02 07:08:25 來源:網絡 閱讀:173 作者:飛寞 欄目:開發技術

  printf()的原型是int printf(const char *fmt, ...);后面三個 . 表示C語言的變參。

  那么什么是變參?它有什么功能和作用呢?

  變參就是參數不確定,可以隨意根據需要來改變的參數。

  我們先舉一個固定參數列表的函數:

int swap(int a,int b)

{

   int c;

   c=a;

   a=b;

   b=c;

   return a; 

}

  這是隨便寫的一個函數,雖然由于里面全都是局部變量的原因所以并不能交換參數,但是這個函數的形式還是挺不錯的。

  再舉例一個可變參數列表函數:

void names(int a , ...)

{

   ……

}

  反正只是定義一個而已,里面的內容就省略了。大家可以看到,下一個參數可以是任意的參數,但是局部變量可知,所有參數的值在調用時要被復制給棧中的連續內存,所以必須有一個普通變量來尋址后續的可變參數的類型和地址。

  也就是說,在使用C語言的變參時,需要將變參,也就是...放在最后一個參數的位置,并且變參前面至少要有一個普通的參數。

  這里有一個例子:

#include <stdarg.h>

#include <stdio.h>


void func1(const char * str1, ...) 

{

    char    *pp;


    pp = ((char*)&str1) + sizeof(str1); 

    printf("%d\n", *(int*)pp);  

        

    pp =  pp + sizeof(int);

    printf("%d\n", *(int*)pp);


    pp =  pp + sizeof(int);

    printf("%s\n", *((char**)pp));

}


int main()

{

    func1("%d %d %s\n", 4, 5, "hello world");

   return 0;

}

    這個函數其實是不對的,原因就是里面存在內存對齊這個問題,但是作為認識和了解可變參數已經足夠了。

    這里的const char * str1實際上指向了一個待打印輸出的字符串。

現在先了解到這里,以后真正用到的時候再詳細討論。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岐山县| 达日县| 定西市| 沂南县| 灌阳县| 四会市| 孟津县| 阳新县| 民和| 额济纳旗| 安图县| 林周县| 眉山市| 溧阳市| 理塘县| 绥滨县| 红河县| 孟州市| 射洪县| 香港| 简阳市| 乌兰察布市| 白朗县| 长治县| 柘城县| 乐昌市| 广南县| 紫阳县| 乳源| 喀喇沁旗| 吴桥县| 关岭| 南雄市| 阳新县| 福鼎市| 固安县| 红河县| 辉南县| 凤翔县| 修水县| 盐池县|