最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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é),這取決于指針的大小(外部結(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é)。總而言之在你有空時(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)文章

  • OpenCV實(shí)現(xiàn)圖像連通域

    OpenCV實(shí)現(xiàn)圖像連通域

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)圖像連通域,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語(yǔ)言實(shí)現(xiàn)求解最小公倍數(shù)的算法示例

    C語(yǔ)言實(shí)現(xiàn)求解最小公倍數(shù)的算法示例

    這篇文章主要為大家介紹了C語(yǔ)言如何實(shí)現(xiàn)求解任意兩個(gè)正整數(shù)的最小公倍數(shù),文中采用了窮舉法和定理法。感興趣的小伙伴快來(lái)跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • C語(yǔ)言實(shí)現(xiàn)隨機(jī)抽取紙牌

    C語(yǔ)言實(shí)現(xiàn)隨機(jī)抽取紙牌

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)隨機(jī)抽取紙牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++中的const和constexpr詳解

    C++中的const和constexpr詳解

    C++ const 和 constexpr 的區(qū)別呢,constexpr表示這玩意兒在編譯期就可以算出來(lái)(前提是為了算出它所依賴(lài)的東西也是在編譯期可以算出來(lái)的)。而const只保證了運(yùn)行時(shí)不直接被修改(但這個(gè)東西仍然可能是個(gè)動(dòng)態(tài)變量)。下面我們來(lái)詳細(xì)講解下。
    2016-01-01
  • OpenCV實(shí)現(xiàn)圖像細(xì)化算法

    OpenCV實(shí)現(xiàn)圖像細(xì)化算法

    本文主要介紹了OpenCV實(shí)現(xiàn)圖像細(xì)化算法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C語(yǔ)言開(kāi)發(fā)實(shí)現(xiàn)貪吃蛇小游戲

    C語(yǔ)言開(kāi)發(fā)實(shí)現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言開(kāi)發(fā)實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Windows下搭建FFmpeg開(kāi)發(fā)調(diào)試環(huán)境的詳細(xì)步驟

    Windows下搭建FFmpeg開(kāi)發(fā)調(diào)試環(huán)境的詳細(xì)步驟

    這篇文章主要介紹了Windows下搭建FFmpeg開(kāi)發(fā)調(diào)試環(huán)境,本文以VS2017為例一步步介紹怎么搭建一個(gè)可供單步調(diào)試的FFmpeg項(xiàng)目,需要的朋友可以參考下
    2022-07-07
  • c++類(lèi)的隱式轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換重載詳解

    c++類(lèi)的隱式轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換重載詳解

    轉(zhuǎn)換函數(shù)的名稱(chēng)是類(lèi)型轉(zhuǎn)換的目標(biāo)類(lèi)型,因此,不必再為它指定返回值類(lèi)型;轉(zhuǎn)換函數(shù)是被用于本類(lèi)型的數(shù)值或變量轉(zhuǎn)換為其他的類(lèi)型,也不必帶參數(shù)
    2013-09-09
  • C語(yǔ)言 動(dòng)態(tài)內(nèi)存開(kāi)辟常見(jiàn)問(wèn)題解決與分析流程

    C語(yǔ)言 動(dòng)態(tài)內(nèi)存開(kāi)辟常見(jiàn)問(wèn)題解決與分析流程

    動(dòng)態(tài)內(nèi)存是相對(duì)靜態(tài)內(nèi)存而言的。所謂動(dòng)態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存
    2022-03-03
  • MFC程序中使用QT開(kāi)發(fā)界面的實(shí)現(xiàn)步驟

    MFC程序中使用QT開(kāi)發(fā)界面的實(shí)現(xiàn)步驟

    本文主要介紹了MFC程序中使用QT開(kāi)發(fā)界面的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論

阳新县| 沐川县| 大理市| 宜兰市| 平陆县| 陕西省| 张家港市| 五大连池市| 庆云县| 松桃| 康保县| 元谋县| 广元市| 阿克陶县| 库尔勒市| 泰宁县| 新宁县| 庆安县| 客服| 若羌县| 宁晋县| 平罗县| 布尔津县| 峨山| 宜兰市| 灵川县| 平顺县| 西城区| 招远市| 济阳县| 五大连池市| 敖汉旗| 峡江县| 徐水县| 双辽市| 大城县| 轮台县| 潞城市| 泸西县| 龙州县| 云阳县|