亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C/C++多參數(shù)函數(shù)參數(shù)的計(jì)算順序與壓棧順序的示例代碼

 更新時(shí)間:2020年06月01日 09:30:02   作者:_程序兔  
這篇文章主要介紹了C/C++多參數(shù)函數(shù)參數(shù)的計(jì)算順序與壓棧順序,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、前言

今天在看Thinking in C++這本書(shū)時(shí),書(shū)中的一個(gè)例子引起了我的注意,具體是使用了下面這句

單看這條語(yǔ)句的語(yǔ)義會(huì)發(fā)現(xiàn)僅僅是使用一個(gè)簡(jiǎn)單的string的substr函數(shù)將所得子串push_back到strings。但是在閱讀時(shí)我卻對(duì)于substr的參數(shù)傳遞產(chǎn)生了疑惑,到底是先執(zhí)行了++current,還是先執(zhí)行了last-current?

經(jīng)過(guò)查閱資料,發(fā)現(xiàn)了兩個(gè)相關(guān)知識(shí)點(diǎn)----參數(shù)的計(jì)算順序與壓棧順序。

二、參數(shù)壓棧順序

C/C++中規(guī)定了函數(shù)參數(shù)的壓棧順序是從右至左,對(duì)于含有不定參數(shù)的printf函數(shù),其原型是printf(const char* format,…);其中format確定了printf的參數(shù)(通過(guò)format的%個(gè)數(shù)判斷)。假設(shè)是從左至右壓棧,那么先入棧的是format(這里我們簡(jiǎn)化理解為參數(shù)個(gè)數(shù)),然后依次入棧未知參數(shù),此時(shí)想要知道參數(shù)個(gè)數(shù),就必須找到format,而要找到format,就必須知道參數(shù)個(gè)數(shù),陷入一個(gè)邏輯矛盾。因此C/C++中規(guī)定參數(shù)壓棧為從右至左,這樣對(duì)于不定參數(shù),最后入棧的是參數(shù)個(gè)數(shù),只需要取棧頂就可以得到??梢酝ㄟ^(guò)下面的程序驗(yàn)證:

#include <stdio.h>
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;
}

 

通過(guò)輸出結(jié)果可以看到x,y,z的棧內(nèi)地址依次是 x < y < z;而棧的生長(zhǎng)方向是從高到低,也就是先入棧的占高地址,因此z先入棧,其次是y,最后是x,即壓棧順序從右至左。

三、參數(shù)計(jì)算順序

知道參數(shù)壓棧順序從右至左,是不是可以得出結(jié)論strings.push_back( s.substr(++current, last-current)); 先執(zhí)行l(wèi)ast-current,再執(zhí)行++current呢?其實(shí)不然,先執(zhí)行哪個(gè)參數(shù)和參數(shù)的計(jì)算順序有關(guān),而 C/C++中沒(méi)有規(guī)定函數(shù)參數(shù)的計(jì)算順序,即計(jì)算順序依照編譯器 ,編譯器規(guī)定從右至左計(jì)算就先執(zhí)行l(wèi)ast-current,規(guī)定從左至右就先執(zhí)行++current,筆者試過(guò)codeblocks與vscode的計(jì)算順序都是從右至左。

也正因?yàn)楹瘮?shù)參數(shù)的計(jì)算順序依照編譯器的實(shí)現(xiàn),因此,C/C++的代碼編寫(xiě)中并不支持編寫(xiě)諸如 func(++x, x+y)這種的程序,在不同編譯器下可能產(chǎn)生不同的結(jié)果,所以上述代碼應(yīng)該分開(kāi)寫(xiě)為:

 int len = last - current;
    ++current;
    strings.push_back(
      s.substr(current, len));

總結(jié)

到此這篇關(guān)于C/C++多參數(shù)函數(shù)參數(shù)的計(jì)算順序與壓棧順序的示例代碼的文章就介紹到這了,更多相關(guān)c/c++函數(shù)參數(shù)壓棧順序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于c的for循環(huán)中改變變量值的問(wèn)題

    基于c的for循環(huán)中改變變量值的問(wèn)題

    本篇文章是對(duì)c語(yǔ)言的for循環(huán)中改變變量值的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • centos 7 vscode cmake 編譯c++工程的教程詳解

    centos 7 vscode cmake 編譯c++工程的教程詳解

    這篇文章給大家介紹了centos 7 使用vscode+cmake配置簡(jiǎn)單c++項(xiàng)目的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-05-05
  • C++中套接字庫(kù)sockpp的使用詳解

    C++中套接字庫(kù)sockpp的使用詳解

    sockpp是一個(gè)開(kāi)源、簡(jiǎn)單、現(xiàn)代的C++套接字庫(kù),這篇文章主要為大家詳細(xì)介紹一下套接字庫(kù)sockpp的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-11-11
  • qml中QtObject類(lèi)型的用法小結(jié)

    qml中QtObject類(lèi)型的用法小結(jié)

    QtObject 類(lèi)型是一個(gè)非可視元素,僅包含objectName屬性,如果需要一個(gè)非常輕量級(jí)的類(lèi)型來(lái)包含一組自定義屬性,那么創(chuàng)建一個(gè)QtObject,本文給大家介紹qml中QtObject類(lèi)型的使用,感興趣的朋友一起看看吧
    2024-01-01
  • C語(yǔ)言實(shí)現(xiàn)騎士飛行棋

    C語(yǔ)言實(shí)現(xiàn)騎士飛行棋

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)騎士飛行棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 詳解C語(yǔ)言?xún)?nèi)核字符串轉(zhuǎn)換方法

    詳解C語(yǔ)言?xún)?nèi)核字符串轉(zhuǎn)換方法

    在內(nèi)核開(kāi)發(fā)模式下,初始化字符串也需要調(diào)用專(zhuān)用的初始化函數(shù),如下分別初始化ANSI和UNCODE字符串,本文我們就來(lái)看看代碼是如何實(shí)現(xiàn)的
    2022-09-09
  • C語(yǔ)言實(shí)現(xiàn)掃雷項(xiàng)目

    C語(yǔ)言實(shí)現(xiàn)掃雷項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)掃雷項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++中智能指針unique_ptr的實(shí)現(xiàn)詳解

    C++中智能指針unique_ptr的實(shí)現(xiàn)詳解

    智能指針本質(zhì)上并不神秘,其實(shí)就是?RAII?資源管理功能的自然展現(xiàn)而已,這篇文章主要為大家詳細(xì)介紹了如何實(shí)現(xiàn)?C++中智能指針的?unique_ptr,需要的可以了解下
    2024-01-01
  • C++實(shí)現(xiàn)廣度優(yōu)先搜索實(shí)例

    C++實(shí)現(xiàn)廣度優(yōu)先搜索實(shí)例

    這篇文章主要介紹了C++實(shí)現(xiàn)廣度優(yōu)先搜索,對(duì)于C++程序員來(lái)說(shuō)非常有借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • C語(yǔ)言中指針常量和常量指針的區(qū)別

    C語(yǔ)言中指針常量和常量指針的區(qū)別

    本文主要介紹了C語(yǔ)言中指針常量和常量指針的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評(píng)論