C++は配列ポインタの参照を伝達し、newは必要ありませんが、必ず初期化します.

1472 ワード

次の2つの書き方はいずれも実現できます.1つ目は、伝達されたポインタが指すメモリ空間アドレスを直接操作することです.このとき、伝達されたときは空間を予約しておき、この空間が使用する前に解放されないことを保証します.newを使わなくてもいいです.ここはmain関数の最後に解放される空間です.(C++スタックに格納された変数の役割ドメイン範囲は括弧である);
#include "mainwindow.h"
#include 
#include 



struct PDWS
{
    PDWS(){TOA = 0;PW = 0;}
    PDWS(double toa,float pw){TOA = toa;PW = pw;}
    double TOA;
    float PW;
};

void fun(PDWS *& p,int &len)
{
    p[0] = PDWS(1,2);
    p[1] = PDWS(3,4);
    p[2] = PDWS(5,6);
    len = 3;
}

int main()
{

    PDWS temp[3];
    PDWS *p = temp;
    int len;
    fun(p,len);
    for (int i=0 ;i

第2に、伝達されたポインタを直接、彼が使用する必要があるときに解放されない空間を指す.例えば、第2のプログラムでは、グローバル変数PDWS p[3].もちろん、この関数が他のプログラムに直接呼び出すことができるようにするには、具体的に方法を提供するクラスを作成し、クラスの中でnewの空間を出て、このクラスの構造関数の中でdelete p;p = NULL;解放され、他のプログラムが呼び出されるときに、データにアクセスする必要があるときにこのクラスのオブジェクトが解放されていないことを保証すればよい.
#include "mainwindow.h"
#include 
#include 



struct PDWS
{
    PDWS(){TOA = 0;PW = 0;}
    PDWS(double toa,float pw){TOA = toa;PW = pw;}
    double TOA;
    float PW;
};
PDWS p[3];
void fun(PDWS *& temp,int &len)
{

    p[0] = PDWS(1,2);
    p[1] = PDWS(3,4);
    p[2] = PDWS(5,6);
    temp = p;
    len = 3;
}

int main()
{

//    PDWS temp[3];
    PDWS *temp;
    int len;
    fun(temp,len);
    for (int i=0 ;i