Форум программистов, компьютерный форум CyberForum.ru

Популярно объясните про указатели - C++

Восстановить пароль Регистрация
 
Mr.ILLUMINOR
 Аватар для Mr.ILLUMINOR
4 / 4 / 0
Регистрация: 13.04.2012
Сообщений: 37
05.01.2013, 17:17     Популярно объясните про указатели #1
Что-то плохо даётся мне тема про указатели. Я хорошо уяснил, что вот так создаётся указатель:

C++
1
int *pointer;
Я так же хорошо уяснил как получить адрес ячейки:

C++
1
pointer = &x;
Я понял как получать значение по его адресу:

C++
1
value = *pointer;
Я разобрался как менять значения, расположенные по адресу:

C++
1
(*pointer)++
или

C++
1
*pointer = 90;
Но вот следующая программа (из учебника по C++ для меня непонятна):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>;
#include <windows.h>;
using namespace std;
int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    char str[] = "Типичный программист", *begin, *end, t;
    int lenght;
    cout << "Исходная строка: " << str << "\n";
    lenght = strlen(str);
    begin = str;
    end = &str[lenght-1];
    while(begin < end)
    {
        t = *begin;
        *begin = *end;
        *end = t;
        begin++;
        end--;
    }
    cout << "Перевёрнутая строка: " << str << "\n";
    system("pause");
    return(0);
}
Что значит эта строчка?

C++
1
begin = str;
Зачем мы получаем адрес последнего символа строки?

C++
1
end = &str[lenght-1];
Как можно сравнивать строку (или что мы получили в begin?) и адрес?

C++
1
while(begin < end)
Заранее спасибо тому, кто сможет популярно объяснить эти места или дать наводку, где можно восполнить пробелы в моих знаниях.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2013, 17:17     Популярно объясните про указатели
Посмотрите здесь:

Вопрос про указатели C++
C++ Опят про указатели)
Про указатели . C++
Про указатели C++
C++ Объясните пожалуйста, как работает код. Указатели
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.01.2013, 17:27     Популярно объясните про указатели #2
Цитата Сообщение от Mr.ILLUMINOR Посмотреть сообщение
begin = str;
Присваивание одному указателю значения другого.

Добавлено через 38 секунд
Цитата Сообщение от Mr.ILLUMINOR Посмотреть сообщение
Как можно сравнивать строку (или что мы получили в begin?) и адрес?
А при чём здесь вообще сравнение строки с адресом?
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
05.01.2013, 17:36     Популярно объясните про указатели #3
1) указателю begin присваивается адрес первого элемента массива символов str.
2) получаем адрес первого и последнего. А потом в цикле от начального до конечного идут какие-то действия.
3) скорее адреса.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
05.01.2013, 17:38     Популярно объясните про указатели #4
Цитата Сообщение от Mr.ILLUMINOR Посмотреть сообщение
Что значит эта строчка?
можете считать имя массива константным указателем на начало массива(на первый элемент).
Цитата Сообщение от Mr.ILLUMINOR Посмотреть сообщение
Зачем мы получаем адрес последнего символа строки?
чтобы потом сравнивать его с указателем begin, который увеличивается в цикле. А end уменьшается.
booker
 Аватар для booker
23 / 23 / 2
Регистрация: 21.11.2012
Сообщений: 106
05.01.2013, 17:39     Популярно объясните про указатели #5
Цитата Сообщение от Mr.ILLUMINOR Посмотреть сообщение
C++
1
while(begin < end)
сравниваются адреса, в цикле итерация begin на байт вперёд end на байт назад, при пересечении str будет полностью перевёрнута.
Yandex
Объявления
05.01.2013, 17:39     Популярно объясните про указатели
Ответ Создать тему
Опции темы

Текущее время: 21:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru