Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- using namespace std;
- int sum(int* mas, int size) {
- int sum = 0;
- for (int i = 0; i < size; ++i) {
- sum += *(mas + i);
- }
- return sum;
- }
- int main()
- {
- int a = 13;
- int& la = a; // создаем ссылку на переменную
- int* pa = &a; // создаем указательна переменную
- cout << &a << endl; // при помощи & можем достать адрес переменной, собственно, он и хранится в указателе
- int b = 1;
- pa = &b; // можем поменять, на какую переменную указывает указатель
- cout << pa << endl; // будет выведен адрес переменной, то есть &b
- cout << *pa << endl; // будет выведено значение, лежащее по адресу, то есть значение переменной b
- // такая операция называется разыменовыванием указателя
- *pa = 2; // можем изменить значение b при помощи указателя
- *pa = la; // например, можем присвоить b значение a через ссылку на a, в b тогда окажется 13
- int* n = nullptr; // можем создать пустой указатель, который никуда не указывает
- if (n == nullptr) { // используется при различных проверках
- cout << "Пустой" << endl;
- }
- // попробуем вывести этот вектор разными новыми способами
- vector<int> v = { 1, 3, 4, 2, 4, 5 };
- // можем пробежаться по нему указателями, при ++p указатель сдвигается на один элемент вектора правее
- // их можно сравнивать, тогда будут сравниваться адреса в памяти
- // вектор расположен в памяти последовательно, его элементы лежат друг за другом и у последнего самый большой адрес
- // этим и пользуемся, берем указатель на начало и идем до адреса последнего элемента включительно
- for (int* p = &v[0]; p <= &v.back(); ++p) {
- cout << *p << " ";
- }
- // можем прибавлять не только 1 к указателю, но и любое другое число (вычитать тоже можем)
- int* start = &v[0];
- for (int i = 0; i < v.size(); ++i) {
- // start указывает на начало вектора, мы сдвигаем его на i элементов вправо и разыменовываем
- cout << *(start + i) << " ";
- }
- // еще есть итераторы, это более "умные" указатели, которые позволяют двигаться по контейнерам,
- // лежащим в памяти не последовательно, при помощи все тех же прибавлений и вычитаний.
- // их функционал очень похож, их тоже можно прибавлять и разыменовывать,
- // у вектора есть .begin() - итератор, указывающий на первый элемент вектора
- // и .end() - итератор, указывающий как бы за последний эелемент вектора
- for (auto x = v.begin(); x < v.end(); ++x) {
- cout << *x << " ";
- }
- // можем использовать указатели для передачи, например, массивов в функцию
- // имя массива служит указателем на его начало
- int mas[6] = { 1, 3, 4, 2, 5, 6 };
- cout << sum(mas, 6) << endl;
- return 0;
- }
RAW Paste Data