2016-07-01 6 views
-3

What does "dereferencing" a pointer mean?演算子[]が見逃していませんか?また、このトピック以下

assert(p[1] == 'b'); 

演算子[]自動的にポインタを欽慕する必要があり、私は「変更」尖ったデータに値を指示してみましょう。

しかし、私はこのような代行う場合:

void QuadraticInterpolateArray(vector<double> *b) { 

    // ... 

    double step = 12.2; 
    for (int j = 0; j < (*b).size(); j++) { 
     b[j] = step; 
    } 

    // ... 
} 

を私はつまり、私は、ベクトルの各インデックスに12.2を設定しようとしているb[j] = step;を使用することはできません。

どこが間違っていますか?違いは?

+0

変更 'ベクトル *ベクトル&B''へB'と何が起こるか見て...! – Sean

+0

ベクトルへのポインタの受け渡しは意味をなさない。 –

答えて

4

std::vector::operator[] dereferencesオフセットを加えたベクトルの内部配列の先頭へのポインタ。自分で別の間接レベルを追加したので、をstd::vectorに電話するには(*b)[j]を実行する必要があります。

b[j]しかし、あなたに与える、std::vector*operator[]を呼び出しstd::vectorj = 0b場合は、配列を指していないだけに有効)。そのようなstd::vector<double>doubleを割り当てることはできません。

はい、パラメータの代わりに参照を使用する必要があります。これにより、値と同じ構文を使用できますが、ポインタと同様に渡されたベクトルが変更されます。

void QuadraticInterpolateArray(vector<double> &b) { 
    // TODO: use std::fill 
    double step = 12.2; 
    for (int j = 0; j < b.size(); j++) { 
     b[j] = step; 
    } 
} 
最初にそのポインタを逆参照することによってベクトル値を取得する必要があり、そのベクターへのポインタを介して、ベクトルの各要素にアクセスするために
+0

はい、私が必要とするのは、渡されたベクトルに値を変更することです。ポインタではなくリファレンスで動作するのはなぜですか?どちらの場合でも、オブジェクトのアドレスを渡しています:O – markzzz

+0

@paizza:_ "どちらの場合でもオブジェクトのアドレスを渡しています" _いいえ考えてみましょう:同じように、なぜ両方のものが存在するのでしょうか? :) –

+0

うん、それは質問:)実際の違いは何ですか? – markzzz

1

、そしてその後、アクセスするために、そのベクトルにオペレータ[]を使用することができ、その要素:

(*b)[i] = step; 
関連する問題