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

C++ 讓函數(shù)返回?cái)?shù)組的方法

 更新時(shí)間:2020年07月17日 11:21:49   作者:菜鳥教程  
這篇文章主要介紹了C++ 讓函數(shù)返回?cái)?shù)組的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

這個(gè)問題屬于非常初級(jí)的問題,但是對(duì)于初學(xué)不知道的人可能會(huì)比較頭疼。C++ 中函數(shù)是不能直接返回一個(gè)數(shù)組的,但是數(shù)組其實(shí)就是指針,所以可以讓函數(shù)返回指針來實(shí)現(xiàn)。比如一個(gè)矩陣相乘的函數(shù),很容易地我們就寫成:

#include <iostream>

using namespace std;

float* MultMatrix(float A[4], float B[4])
{
  float M[4];
  M[0] = A[0]*B[0] + A[1]*B[2];
  M[1] = A[0]*B[1] + A[1]*B[3];
  M[2] = A[2]*B[0] + A[3]*B[2];
  M[3] = A[2]*B[1] + A[3]*B[3];

  return M;
}

int main()
{
  float A[4] = { 1.75, 0.66, 0, 1.75 };
  float B[4] = {1, 1, 0, 0};
  float *M = MultMatrix(A, B);
  cout << M[0] << " " << M[1] << endl;
  cout << M[2] << " " << M[3] << endl;

  return 0;
}

但是運(yùn)行后發(fā)現(xiàn)結(jié)果是:

1.75 1.75
6.51468e-039 3.76489e-039

本不是想要的結(jié)果。于是我們?cè)诤瘮?shù)中也加上顯示代碼,看看是不是計(jì)算的問題,得到結(jié)果:

1.75 1.75
0 0
1.75 1.75
1.96875 1.75

發(fā)現(xiàn)計(jì)算的結(jié)果是正確的,但返回后就變了,而且跟上次的結(jié)果不一樣。這是為什么呢?

因?yàn)樵诤瘮?shù)中定義的數(shù)組M在函數(shù)執(zhí)行完后已經(jīng)被系統(tǒng)釋放掉了,所以在調(diào)用函數(shù)中得到的結(jié)果當(dāng)然不是計(jì)算后的結(jié)果。有一個(gè)解決辦法就是動(dòng)態(tài)分配內(nèi)存,在函數(shù)中 new 一個(gè)數(shù)組,這樣就不會(huì)被釋放掉了。

于是就應(yīng)該將:

float M[4];

改為:

float *M = new float[4];

修改運(yùn)行后得到結(jié)果:

1.75 1.75
0 0
1.75 1.75
0 0

正確。但是我們這樣并沒有將自己申請(qǐng)的空間釋放掉,如果我們?cè)诤瘮?shù)內(nèi)釋放的話結(jié)果就會(huì)跟開始時(shí)的一樣了。

看看我們的調(diào)用代碼:

float *M = MultMatrix(A, B);

這樣其實(shí)是將M指針指向了函數(shù)中M數(shù)組的首地址,我們可以將M指針釋放,效果和釋放申請(qǐng)的M數(shù)組是一樣的,因?yàn)樗鼈冎赶虻氖峭黄瑑?nèi)存空間。于是代碼就修改為:

#include <iostream>

using namespace std;

float* MultMatrix(float A[4], float B[4])
{
  float *M = new float[4];
  M[0] = A[0]*B[0] + A[1]*B[2];
  M[1] = A[0]*B[1] + A[1]*B[3];
  M[2] = A[2]*B[0] + A[3]*B[2];
  M[3] = A[2]*B[1] + A[3]*B[3];
  cout << M[0] << " " << M[1] << endl;
  cout << M[2] << " " << M[3] << endl;

  return M;
}

int main()
{
  float A[4] = { 1.75, 0.66, 0, 1.75 };
  float B[4] = {1, 1, 0, 0};
  float *M = MultMatrix(A, B);
  cout << M[0] << " " << M[1] << endl;
  cout << M[2] << " " << M[3] << endl;
  delete[] M;

  return 0;
}

運(yùn)行結(jié)果:

1.75 1.75
0 0
1.75 1.75
0 0

沒有問題,new的空間也delete掉了。

鑒于下面大牛們的建議,我將程序修改如下,大家看可否:

#include <iostream>

using namespace std;

void MultMatrix(float M[4], float A[4], float B[4])
{
  M[0] = A[0]*B[0] + A[1]*B[2];
  M[1] = A[0]*B[1] + A[1]*B[3];
  M[2] = A[2]*B[0] + A[3]*B[2];
  M[3] = A[2]*B[1] + A[3]*B[3];

  cout << M[0] << " " << M[1] << endl;
  cout << M[2] << " " << M[3] << endl;
}

int main()
{
  float A[4] = { 1.75, 0.66, 0, 1.75 };
  float B[4] = {1, 1, 0, 0};

  float *M = new float[4];
  MultMatrix(M, A, B);

  cout << M[0] << " " << M[1] << endl;
  cout << M[2] << " " << M[3] << endl;
  delete[] M;

  return 0;
}

點(diǎn)評(píng)內(nèi)容:

首先,數(shù)組的 delete 是 delete[]。

其次,C++ 里面手動(dòng)內(nèi)存分配的一個(gè)重要原則是誰分配誰釋放。

所以,不應(yīng)該在MultMatrix里new數(shù)組,而應(yīng)該在外面new好了之后傳進(jìn)去修改。

要想返回一個(gè)數(shù)組,使用智能指針之類的東西才是正途。

以上就是C++ 讓函數(shù)返回?cái)?shù)組的方法的詳細(xì)內(nèi)容,更多關(guān)于C++ 讓函數(shù)返回?cái)?shù)組的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C語言中形參和實(shí)參詳解及實(shí)例代碼

    C語言中形參和實(shí)參詳解及實(shí)例代碼

    這篇文章主要介紹了C語言中形參和實(shí)參詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 利用C/C++實(shí)現(xiàn)較完整貪吃蛇游戲

    利用C/C++實(shí)現(xiàn)較完整貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了利用C/C++實(shí)現(xiàn)較完整貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 詳解C語言進(jìn)程同步機(jī)制

    詳解C語言進(jìn)程同步機(jī)制

    這篇文章主要介紹了詳解C語言進(jìn)程同步機(jī)制的的相關(guān)資料,文中代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C++運(yùn)算符重載限制介紹

    C++運(yùn)算符重載限制介紹

    這篇文章主要介紹了C++運(yùn)算符重載限制,關(guān)于運(yùn)算符的重載并不是隨心所欲的。C++給出了一些限制,從而保證了規(guī)范,以及程序運(yùn)行的準(zhǔn)確性,下面來了解C++運(yùn)算符重載限制的詳細(xì)內(nèi)容吧,需要的朋友也可以參考一下
    2022-01-01
  • QT實(shí)現(xiàn)圖片輪播

    QT實(shí)現(xiàn)圖片輪播

    這篇文章主要介紹了QT實(shí)現(xiàn)圖片輪播,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Qt實(shí)現(xiàn)SqlRelationalTable關(guān)聯(lián)表組件

    Qt實(shí)現(xiàn)SqlRelationalTable關(guān)聯(lián)表組件

    在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實(shí)現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點(diǎn)介紹SqlRelationalTable關(guān)聯(lián)表組件的常用方法及靈活運(yùn)用,感興趣的可以了解一下
    2023-12-12
  • C++ vector模擬實(shí)現(xiàn)的代碼詳解

    C++ vector模擬實(shí)現(xiàn)的代碼詳解

    vector是表示可變大小數(shù)組的序列容器,就像數(shù)組一樣,vector也采用的連續(xù)存儲(chǔ)空間來存儲(chǔ)元素,本質(zhì)講,vector使用動(dòng)態(tài)分配數(shù)組來存儲(chǔ)它的元素,本文將給大家詳細(xì)介紹一下C++ vector模擬實(shí)現(xiàn),需要的朋友可以參考下
    2023-07-07
  • 如何在C語言中提取Shellcode并執(zhí)行

    如何在C語言中提取Shellcode并執(zhí)行

    Shellcode是一種獨(dú)立于應(yīng)用程序的機(jī)器代碼,通常用于實(shí)現(xiàn)特定任務(wù),如執(zhí)行遠(yuǎn)程命令、注入惡意軟件或利用系統(tǒng)漏洞,本文將深入探討如何在C語言中提取Shellcode,并通過XOR加密技術(shù)增加其混淆程度,文中通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • c++ vector對(duì)象相關(guān)總結(jié)

    c++ vector對(duì)象相關(guān)總結(jié)

    這篇文章主要介紹了c++ vector對(duì)象的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-02-02
  • C語言動(dòng)態(tài)順序表實(shí)例代碼

    C語言動(dòng)態(tài)順序表實(shí)例代碼

    大家好,本篇文章主要講的是C語言動(dòng)態(tài)順序表實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評(píng)論

农安县| 应用必备| 彭州市| 新营市| 吴堡县| 鹤壁市| 星座| 双城市| 都昌县| 崇州市| 彭州市| 三门峡市| 麻江县| 平安县| 浪卡子县| 定日县| 泸州市| 保德县| 于田县| 延安市| 获嘉县| 华亭县| 罗田县| 明溪县| 深泽县| 曲靖市| 宁津县| 碌曲县| 东平县| 尚志市| 万源市| 吉林市| 黑水县| 宝丰县| 谢通门县| 通河县| 余江县| 浦县| 宝清县| 普兰县| 文昌市|