Если ap - указатель, почему я могу ссылаться на его значения через ap [i]? - PullRequest
1 голос
/ 15 марта 2019
class Vektor {
private:
    double *ap;
    int len;
public:
    Vektor() : ap(0),len(0) { } 
    Vektor(int n): len(n) { ap = new double [n]; } 
    double& front() { return ap[0]; }
    double front() const { return ap[0]; }
};

int main()
{
    int n;
    cout << "n: "; cin >> n;
    Vektor a(n); 
    a.front() = 5; 
    cout << "a.front()=" << a.front() << endl;
    return 0;
}

Я смущен использованием указателя ap в этом коде. По определению конструктора ap, освобождая стандартный конструктор, указывает на область памяти в куче, которая содержит n двойные переменные. Конечно, если я хочу вернуть любое значение для front(), мне нужно будет определить

double front() const { return ap*[0];}

и

double& front() { return ap*[0];}

а не так, как это определено выше, верно? Или double* ap просто способ объявить массив ap?

1 Ответ

1 голос
/ 16 марта 2019

ap - указатель на первый элемент массива: ap = new double [n];. Указатели позволяют доступ к ним осуществляется с помощью оператора [] (независимо от того, указывают они на массивы или нет). Как уже упоминалось в комментариях, a[b] ведет себя как *(a + b).

...