第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

從C ++中的函數(shù)返回?cái)?shù)組

從C ++中的函數(shù)返回?cái)?shù)組

C++
湖上湖 2020-02-03 12:50:19
我試圖從函數(shù)返回?cái)?shù)組:#include <iostream>using namespace std;int* uni(int *a,int *b){    int c[10];    int i=0;    while(a[i]!=-1)    {        c[i]=a[i];        i++;    }    for(;i<10;i++)        c[i]=b[i-5];    return c;}int main(){    int a[10]={1,3,3,8,4,-1,-1,-1,-1,-1};    int b[5]={1,3,4,3,0};    int *c=uni(a,b);    for(int i=0;i<10;i++)        cout<<c[i]<<" ";    cout<<"\n";    return 0;}我從main()我的uni()函數(shù)傳遞兩個(gè)數(shù)組。在那里,我創(chuàng)建了一個(gè)新數(shù)組c[10],返回到main()。在我的uni()函數(shù)中,我嘗試合并兩個(gè)數(shù)組a和中的非負(fù)數(shù)b。但是我得到的輸出是這樣的。1 -1078199700 134514080 -1078199656 -1216637148 134519488 134519297 134519488 8 -1078199700 而當(dāng)我嘗試打印函數(shù)中的值時(shí)c[10],uni()它將打印正確的值。為什么會(huì)這樣?這和堆棧有關(guān)嗎?因?yàn)槲乙呀?jīng)嘗試搜索我的這個(gè)錯(cuò)誤,所以我在stackoverflow上找到了一些地方,上面寫(xiě)著這個(gè),do not allocate on stack但是我聽(tīng)不懂。此外,如果我在全局范圍內(nèi)分配數(shù)組,這將變得非常容易,但是如果是這種情況,那么所有內(nèi)容都應(yīng)全局聲明?我們?yōu)槭裁催€要擔(dān)心從函數(shù)傳遞指針呢?(我的書(shū)中有一章用于傳遞指針)
查看完整描述

3 回答

?
冉冉說(shuō)

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊

不可否認(rèn),std::vectoror std::array方法是必經(jīng)之路。


但是,只是為了解決問(wèn)題(如果這是一個(gè)學(xué)校項(xiàng)目,如果老師給您強(qiáng)制性的“您不能使用STL”),則可以避免使用指針的另一種方法是將數(shù)組包裝在struct和返回該結(jié)構(gòu)的實(shí)例。


#include <iostream>


using namespace std;

struct myArray

{

   int array[10];

};


myArray uni(int *a,int *b)

{

    myArray c;

    int i=0;

    while(a[i]!=-1)

    {

        c.array[i]=a[i];

        i++;

    }

    for(;i<10;i++)

        c.array[i]=b[i-5];

    return c;

}


int main()

{

    int a[10]={1,3,3,8,4,-1,-1,-1,-1,-1};

    int b[5]={1,3,4,3,0};

    myArray c = uni(a,b);

    for(int i=0;i<10;i++)

        cout << c.array[i] << " ";

    cout << "\n";

    return 0;

}

注意,該結(jié)構(gòu)按值返回,并且此返回值在中分配main。


您具有返回實(shí)例的值語(yǔ)義,此外還將復(fù)制該結(jié)構(gòu),包括其中的內(nèi)部數(shù)組。


查看完整回答
反對(duì) 回復(fù) 2020-02-03
?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊

您正在返回一個(gè)指向本地對(duì)象的指針。在uni函數(shù)中,變量c分配在堆棧上。在該函數(shù)結(jié)束時(shí),將釋放所有內(nèi)存,并且在for循環(huán)中您將獲得未定義的結(jié)果。

如注釋中所建議,std::array或者std::vector將為您提供復(fù)制構(gòu)造函數(shù),該構(gòu)造函數(shù)將允許您在嘗試執(zhí)行操作時(shí)按值返回對(duì)象。否則,您將不得不訴諸類(lèi)似將輸出數(shù)組作為參數(shù)傳入的方法。


查看完整回答
反對(duì) 回復(fù) 2020-02-03
?
明月笑刀無(wú)情

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊

您將返回一個(gè)指向要在return語(yǔ)句處釋放的數(shù)組的指針。這是一個(gè)懸空的指針。是UB。

使用std::vectorstd::array并按值返回。有一些編譯器優(yōu)化可以避免效率低下。


查看完整回答
反對(duì) 回復(fù) 2020-02-03
  • 3 回答
  • 0 關(guān)注
  • 707 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)