вопрос о параметре в этой функции - PullRequest
0 голосов
/ 29 сентября 2019

У меня два вопроса по поводу следующего кода, в частности, функция int sum(const int *begin, const int *end).Я не понимаю, что такое *p и p в этой функции?

Является ли *p указателем в этой функции, а как насчет p?p переменная?Я читал, что: " В const int *p, *p (содержимое, на которое указывает), является постоянным, но p не является постоянным. "

Я не совсем понимаюразница между *p и p в этой функции.

Мой второй вопрос: что является причиной объявления const в: const int *p = begin в цикле for int sum(...)?Это потому, что в подписи int sum(...) объявлено const для: const int *p = begin?Т.е. это потому, что begin объявляется как нечто неизменяемое - поэтому в цикле for мы должны объявить begin - неизменную константу, на которую указывает указатель *p?

/* Function to compute the sum of a range of an array (SumArrayRange.cpp) */
#include <iostream>
using namespace std;

// Function prototype
int sum(const int *begin, const int *end);

// Test Driver
   int main() {
   int a[] = {8, 4, 5, 3, 2, 1, 4, 8};
   cout << sum(a, a+8) << endl;        // a[0] to a[7]
   cout << sum(a+2, a+5) << endl;      // a[2] to a[4]
   cout << sum(&a[2], &a[5]) << endl;  // a[2] to a[4]
}

// Function definition
// Return the sum of the given array of the range from
// begin to end, exclude end.
int sum(const int *begin, const int *end) {
    int sum = 0;
    for (const int *p = begin; p != end; ++p) {
        sum += *p;
    }
    return sum;
}

1 Ответ

0 голосов
/ 29 сентября 2019

p - переменная указателя.* имеет два значения:

  1. Это объявление указателя
  2. Его оператор применяется к p переменной для получения ее значения
const int* p; // (1) p is pointer on immutable int
int x = *p; // (2) let's take value where p points and put it in x
*p = 1; // (2) set value where p points

Ида, вы правы с const для р.Это потому что begin это const

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...