欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++小知識(shí):C/C++中不要按值傳遞數(shù)組

 更新時(shí)間:2019年01月16日 15:04:04   作者:修語(yǔ)講編程  
今天小編就為大家分享一篇關(guān)于C++小知識(shí):C/C++中不要按值傳遞數(shù)組,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

錯(cuò)誤的代碼:

ID_INLINE mat3_t::mat3_t( float src[ 3 ][ 3 ] ) {
 memcpy( mat, src, sizeof( src ) );
}

說(shuō)明:

有時(shí)候程序員會(huì)忘記 C/C++ 里數(shù)組不能按值傳遞給函數(shù)。當(dāng)你試圖這樣做時(shí),是數(shù)組的指針(第一個(gè)元素的地址)而不是整個(gè)數(shù)組被傳遞。我們還應(yīng)該記住,方括號(hào)中的數(shù)字沒(méi)有任何意義。它們僅僅是程序員所做的標(biāo)志,記錄了傳遞數(shù)組的『假定』大小。事實(shí)上,你也可以傳遞一個(gè)大小完全不同的數(shù)組。例如,下面的代碼就會(huì)成功編譯:

void F(int p[10]) { }
void G()
{
 int p[3];
 F(p);
}

相應(yīng)的,sizeof(src) 運(yùn)算符表示的不是數(shù)組的大小,而是指針的大小。結(jié)果就是memcpy() 僅復(fù)制了數(shù)組的一部分。也就是4或8字節(jié),這取決于指針的大?。ㄍ獠拷Y(jié)構(gòu)體不算)。

正確的代碼:

這樣的代碼最簡(jiǎn)單的變形像這樣:

ID_INLINE mat3_t::mat3_t( float src[ 3 ][ 3 ] ) {
 memcpy(mat, src, sizeof(float) * 3 * 3);
}

建議:

有幾種讓你的代碼更安全的方法。

數(shù)組大小已知。你可以在函數(shù)中使用數(shù)組的引用。但并不是每個(gè)人都知道可以這么做,知道如何編寫(xiě)這樣的代碼的人則更少。所以我希望這個(gè)例子是有趣并有用的:

ID_INLINE mat3_t::mat3_t( float (&src)[3][3] )
{
 memcpy( mat, src, sizeof( src ) );
}

現(xiàn)在就可以給函數(shù)傳遞大小正確的數(shù)組了,而且最重要的是,sizeof() 得到了數(shù)組的實(shí)際大小。

解決這個(gè)問(wèn)題的另一個(gè)方法是使用std::array類(lèi)。

數(shù)組大小未知。一些書(shū)的作者建議使用std::vector類(lèi),或者其他相似的類(lèi)。然而實(shí)際中這樣做并不總是很方便。

有時(shí)你想用一個(gè)簡(jiǎn)單的指針。在這種情況下,你應(yīng)該向函數(shù)傳遞兩個(gè)參數(shù):一個(gè)指針和元素的數(shù)量。然而,總的來(lái)說(shuō)這不是一個(gè)好做法,它會(huì)導(dǎo)致很多bug。

這種情況下,可以去讀一下《C++核心指南》中的一些想法。我建議看《不要用一個(gè)單獨(dú)的指針傳遞數(shù)組》章節(jié)??偠灾谀阌锌諘r(shí)讀讀《C++核心指南》總是有好處的。里面有很多有用的想法。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 解決 VSCode 編寫(xiě) C++11 代碼報(bào)紅問(wèn)題分析

    解決 VSCode 編寫(xiě) C++11 代碼報(bào)紅問(wèn)題分析

    今天在寫(xiě) C++ 代碼的時(shí)候用上 C++11 的特性,然后發(fā)現(xiàn) VSCode 雖然可以編譯通過(guò),但是會(huì)在相應(yīng)位置報(bào)紅,這是怎么回事呢?下面小編給大家?guī)?lái)了解決方法,一起看看吧
    2021-09-09
  • C/C++ 運(yùn)用Npcap發(fā)送UDP數(shù)據(jù)包的完美過(guò)程

    C/C++ 運(yùn)用Npcap發(fā)送UDP數(shù)據(jù)包的完美過(guò)程

    UDP 是一種無(wú)連接、輕量級(jí)的傳輸層協(xié)議,與 TCP 相比,它不提供可靠性、流控制和錯(cuò)誤恢復(fù)機(jī)制,但卻更加簡(jiǎn)單且具有較低的開(kāi)銷(xiāo),這篇文章主要介紹了C/C++ 運(yùn)用Npcap發(fā)送UDP數(shù)據(jù)包,需要的朋友可以參考下
    2023-11-11
  • C++強(qiáng)制類(lèi)型轉(zhuǎn)換(static_cast、dynamic_cast、const_cast、reinterpret_cast)

    C++強(qiáng)制類(lèi)型轉(zhuǎn)換(static_cast、dynamic_cast、const_cast、reinterpret_ca

    本文主要介紹了C++強(qiáng)制類(lèi)型轉(zhuǎn)換,主要介紹了static_cast、dynamic_cast、const_cast、reinterpret_cast的4種方法,感興趣的可以了解一下
    2021-08-08
  • C語(yǔ)言運(yùn)算符與表達(dá)式

    C語(yǔ)言運(yùn)算符與表達(dá)式

    這篇文章主要介紹了C語(yǔ)言運(yùn)算符與表達(dá)式,表達(dá)式是C語(yǔ)言的主體。在C語(yǔ)言中,表達(dá)式由操作符和操作數(shù)組成,更多相關(guān)介紹需要的小伙伴可以參考下面文章內(nèi)容
    2022-07-07
  • C語(yǔ)言?struct結(jié)構(gòu)體超詳細(xì)講解

    C語(yǔ)言?struct結(jié)構(gòu)體超詳細(xì)講解

    C語(yǔ)言中,結(jié)構(gòu)體類(lèi)型屬于一種構(gòu)造類(lèi)型(其他的構(gòu)造類(lèi)型還有:數(shù)組類(lèi)型,聯(lián)合類(lèi)型),下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • 簡(jiǎn)單總結(jié)C++中的修飾符類(lèi)型

    簡(jiǎn)單總結(jié)C++中的修飾符類(lèi)型

    這篇文章主要介紹了C++中的修飾符類(lèi)型總結(jié),是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-05-05
  • C++98/11/17表達(dá)式類(lèi)別(小結(jié))

    C++98/11/17表達(dá)式類(lèi)別(小結(jié))

    這篇文章主要介紹了C++98/11/17表達(dá)式類(lèi)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • C++中的偽隨機(jī)數(shù)

    C++中的偽隨機(jī)數(shù)

    這篇文章主要介紹了C++中的偽隨機(jī)數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++如何切割String對(duì)象的方法

    C++如何切割String對(duì)象的方法

    C++相較于Java,Python 并沒(méi)有提供的字符串分割的函數(shù)split,因此需要自己進(jìn)行編寫(xiě),本文主要介紹了C++如何切割String對(duì)象的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中二分查找遞歸非遞歸實(shí)現(xiàn)并分析

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中二分查找遞歸非遞歸實(shí)現(xiàn)并分析

    這篇文章主要介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)中二分查找遞歸非遞歸實(shí)現(xiàn)并分析的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評(píng)論