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

C++ 讓函數(shù)返回數(shù)組的方法

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

這個問題屬于非常初級的問題,但是對于初學不知道的人可能會比較頭疼。C++ 中函數(shù)是不能直接返回一個數(shù)組的,但是數(shù)組其實就是指針,所以可以讓函數(shù)返回指針來實現(xiàn)。比如一個矩陣相乘的函數(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;
}

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

1.75 1.75
6.51468e-039 3.76489e-039

本不是想要的結果。于是我們在函數(shù)中也加上顯示代碼,看看是不是計算的問題,得到結果:

1.75 1.75
0 0
1.75 1.75
1.96875 1.75

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

因為在函數(shù)中定義的數(shù)組M在函數(shù)執(zhí)行完后已經(jīng)被系統(tǒng)釋放掉了,所以在調用函數(shù)中得到的結果當然不是計算后的結果。有一個解決辦法就是動態(tài)分配內存,在函數(shù)中 new 一個數(shù)組,這樣就不會被釋放掉了。

于是就應該將:

float M[4];

改為:

float *M = new float[4];

修改運行后得到結果:

1.75 1.75
0 0
1.75 1.75
0 0

正確。但是我們這樣并沒有將自己申請的空間釋放掉,如果我們在函數(shù)內釋放的話結果就會跟開始時的一樣了。

看看我們的調用代碼:

float *M = MultMatrix(A, B);

這樣其實是將M指針指向了函數(shù)中M數(shù)組的首地址,我們可以將M指針釋放,效果和釋放申請的M數(shù)組是一樣的,因為它們指向的是同一片內存空間。于是代碼就修改為:

#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;
}

運行結果:

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;
}

點評內容:

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

其次,C++ 里面手動內存分配的一個重要原則是誰分配誰釋放。

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

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

以上就是C++ 讓函數(shù)返回數(shù)組的方法的詳細內容,更多關于C++ 讓函數(shù)返回數(shù)組的資料請關注腳本之家其它相關文章!

相關文章

  • C語言中#pragma預處理指令的使用

    C語言中#pragma預處理指令的使用

    在所有的預處理指令中,#pragma指令可能是最復雜的了,它的作用是設定編譯器的狀態(tài)或者是指示編譯器完成一些特定的動作,本文主要介紹了C語言中#pragma預處理指令的使用,感興趣的可以了解一下
    2023-12-12
  • Matlab實現(xiàn)二維散點主方向直方圖的繪制詳解

    Matlab實現(xiàn)二維散點主方向直方圖的繪制詳解

    這篇文章主要為大家詳細介紹了如何利用Matlab實現(xiàn)二維散點主方向直方圖的繪制,文中的示例代碼講解詳細,對我們學習Matlab有一定幫助,需要的可以參考一下
    2022-09-09
  • C++定制刪除器與特殊類設計(餓漢和懶漢)

    C++定制刪除器與特殊類設計(餓漢和懶漢)

    這篇文章主要給大家介紹了關于C++定制刪除器與特殊類設計的相關資料,使用餓漢模式和懶漢模式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • C語言數(shù)據(jù)結構之循環(huán)鏈表的簡單實例

    C語言數(shù)據(jù)結構之循環(huán)鏈表的簡單實例

    這篇文章主要介紹了C語言數(shù)據(jù)結構之循環(huán)鏈表的簡單實例的相關資料,需要的朋友可以參考下
    2017-06-06
  • vscode 安裝go第三方擴展包填坑記錄的詳細教程

    vscode 安裝go第三方擴展包填坑記錄的詳細教程

    這篇文章主要介紹了vscode 安裝go第三方擴展包填坑記錄,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C++?DLL注入工具(完整源碼)

    C++?DLL注入工具(完整源碼)

    這篇文章主要介紹了C++?DLL注入工具的相關資料,并向大家分享了完整的源碼,具有一定的參考價值,希望對正在工作或學習的你有所幫助
    2022-02-02
  • Qt使用QChart實現(xiàn)動態(tài)顯示溫度變化曲線

    Qt使用QChart實現(xiàn)動態(tài)顯示溫度變化曲線

    Qt的QChart是一個用于繪制圖表和可視化數(shù)據(jù)的類,提供了一個靈活的、可擴展的、跨平臺的圖表繪制解決方案,所以本文就將使用QChart實現(xiàn)動態(tài)顯示3個設備的溫度變化曲線,感興趣的可以了解一下
    2023-06-06
  • C,C++中常用的操作字符串的函數(shù)

    C,C++中常用的操作字符串的函數(shù)

    這篇文章主要介紹了C,C++中常用的操作字符串的函數(shù),需要的朋友可以參考下
    2017-09-09
  • 簡單總結C語言中各種類型的指針的概念

    簡單總結C語言中各種類型的指針的概念

    這篇文章主要簡單總結了C語言中各種類型的指針的概念,指針可以說是C語言本身所具有的最大特性,平時根據(jù)不同使用場合習慣地將其簡單分類,需要的朋友可以參考下
    2016-03-03
  • C/C++中字符串流詳解及其作用介紹

    C/C++中字符串流詳解及其作用介紹

    這篇文章主要介紹了C/C++中字符串流詳解及其作用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09

最新評論