1. ホーム
  2. c++

[解決済み] C++における*&と**&の意味

2022-02-07 16:08:26

質問事項

関数宣言の中に何度かこれらの記号を見つけたが、意味がわからない。

void raccogli_dati(double **& V, double **p, int N) { 
  int ultimo = 3; 
  V = new double * [N/2]; 
  for(int i=0; i < N/2; i++) { 
    V[i] = new double[N/2], std :: clog << "digita " << N/2 - i
                 << " valori per la parte superiore della matrice V: "; 
    for(int j=i; j < N/2; j++) 
      std :: cin >> V[i][j], p[ultimo++][0] = (V[i][j] /= sqrt(p[i][0]*p[j][0]));
  } 
  for(int i=1; i < N/2; i++) 
    for(int j=0; j < i; j++) 
       V[i][j] = V[j][i];
}

解決方法は?

それは、参照によってパラメータを取ることです。つまり、最初のケースでは、ポインタのパラメータを参照で取っているので、ポインタの値にどんな変更を加えても、関数の外部に反映されます。2つ目のケースは、最初のケースと似ていますが、唯一の違いは、ポインタがダブルポインタであることです。この例を見てください。

void pass_by_value(int* p)
{
    //Allocate memory for int and store the address in p
    p = new int;
}

void pass_by_reference(int*& p)
{
    p = new int;
}

int main()
{
    int* p1 = NULL;
    int* p2 = NULL;

    pass_by_value(p1); //p1 will still be NULL after this call
    pass_by_reference(p2); //p2 's value is changed to point to the newly allocate memory

    return 0;
}