Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2013, 20:21   #1
-=Andriushka=-
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 91
По умолчанию указатели не понятно (

всем привет)помогите разобраться с указателями)
обьясните как можно расшифровать след строки примеров? :
i = i -> j
i -> j = j
i -> j -> k !=X
i -> j -> j -> k = X
-=Andriushka=- вне форума Ответить с цитированием
Старый 22.12.2013, 20:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

i = i -> j Указателю i присваивается значение свойства (поля) объекта i
i -> j = j Свойству указателя i присваивается j
i -> j -> k !=X Если свойство к, свойства j объекта i не равно Х то...

i -> j -> j -> k = X А это сам по аналогии додумай )
-> это значит "обратится к свойству (полю) объекта или структуры указателя"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.12.2013, 17:28   #3
-=Andriushka=-
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 91
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
i = i -> j Указателю i присваивается значение свойства (поля) объекта i
i -> j = j Свойству указателя i присваивается j
i -> j -> k !=X Если свойство к, свойства j объекта i не равно Х то...

i -> j -> j -> k = X А это сам по аналогии додумай )
-> это значит "обратится к свойству (полю) объекта или структуры указателя"
а вот еще такой момент не понятен,подскажи пожалуйста если вот так
*i -> j = k
-=Andriushka=- вне форума Ответить с цитированием
Старый 23.12.2013, 18:02   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пуфффф...
Указатель i указывает на объект, у которого есть свойство j. Ему и присваивается "к"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.12.2013, 18:44   #5
-=Andriushka=-
Пользователь
 
Регистрация: 17.02.2011
Сообщений: 91
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Пуфффф...
Указатель i указывает на объект, у которого есть свойство j. Ему и присваивается "к"
вот пуффф не пуффф но как то меня просто смутила *i
-=Andriushka=- вне форума Ответить с цитированием
Старый 23.12.2013, 18:45   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

* разименовывает указатель.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.12.2013, 18:50   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
*i -> j = k
если это С, то i и j - указатели, j разыменовывается и присваивается значение k
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 23.12.2013 в 18:53.
pproger вне форума Ответить с цитированием
Старый 23.12.2013, 18:54   #8
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Рекомендую изучить пример:
Код:
#include <iostream>


struct Data
{
    int value;
    int *data_p;
    Data *second_data;
};

class Pointer
{
    Data *pint;
public:
    Pointer(Data *p): pint(p) {}
    Data &operator*()   { return *this->pint; }
    Data *operator->()  { return this->pint; }
    int data;
};


int main()
{
    int val;
    Data data;
    Pointer my_pointer = &data;
    
    my_pointer->value = 12;
    (*my_pointer).value = 3;                // Приоритет * выше чем ->
    my_pointer.data = 1;
    my_pointer->data_p = &val;
    *my_pointer->data_p = 1010101;  // Приоритет -> выше чем *
    std::cout << *my_pointer->data_p << "\n";
    
    Data sec_data;
    my_pointer->second_data = &sec_data;
    my_pointer->second_data->value = 777;
    std::cout << sec_data.value << "\n";
    std::cout << my_pointer->second_data->value;
    
    return 0;
}
class Pointer работает аналогично встроенным указателям. О приоритетах операторов написано здесь http://en.cppreference.com/w/cpp/lan...tor_precedence
220Volt вне форума Ответить с цитированием
Старый 23.12.2013, 19:13   #9
220Volt
Форумчанин
 
Регистрация: 14.12.2012
Сообщений: 668
По умолчанию

Из личного опыта могу порекомендовать (на правоту не претендую):
расшифровывать тип переменной нужно чтением справа налево:
int *const**pv - pv это указатель указывающий на указатель, указывающий на константный указатель, указывающий на int;
int **&pr - pr это ссылка на указатель, указывающий на указатель, указывающий на int.
220Volt вне форума Ответить с цитированием
Старый 26.12.2013, 20:52   #10
vvmcpp
Форумчанин
 
Аватар для vvmcpp
 
Регистрация: 11.12.2010
Сообщений: 116
По умолчанию

Цитата:
Сообщение от -=Andriushka=- Посмотреть сообщение
а вот еще такой момент не понятен,подскажи пожалуйста если вот так
*i -> j = k
Такая запись внесет больше ясности
*(i->j)=k;

в ячейку на которую указывает (i->j) заносится значение переменной к.
vvmcpp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39
легко, но не понятно? ЖЕНЕЧКА Паскаль, Turbo Pascal, PascalABC.NET 1 19.04.2009 00:13
Не понятно с кодом Михаил Юрьевич Общие вопросы Delphi 2 08.02.2008 08:07