Указатели

Oct 21, 2011 12:05

Окей, я честно всю ночь пыталась с этим разобраться.
Но почему-то мне очень хочется сказать, что это какая-то гребаная женская логика (да, я шовинистическая свинья!).
Серьезно, на несколько страниц гуглопоиска по разным ключевым словам - ничерта непонятно, плюс разный синтаксис везде.

[Внимание! Пост проапдейчен в связи с тем, что я разобралась с ( Read more... )

непонятные буковки, вышел из себя в открытый космос

Leave a comment

Comments 32

Это не вброс. the_aaa13 October 21 2011, 15:27:01 UTC
Все от того, что програмировать надо начинать учиться с паскаля. Особенно если не планируешь посвятить ему жизнь, а для общего развития.

Reply

Re: Это не вброс. evilduckk October 21 2011, 18:38:52 UTC
Эээ... С Паскаля и начинала вроде как.

Reply

Re: Это не вброс. udpn October 22 2011, 18:07:18 UTC
Паскаль?

В ЕБЛИЩЕ!11

Reply

Re: Это не вброс. evilduckk October 22 2011, 18:15:42 UTC
Ну, лучше начинать с паскаля, чем с сишечки.

Reply


udpn October 22 2011, 17:59:29 UTC
int b = 5;
a = &b; // положить в а адрес b
cout << *a << endl; // получить данные по адресу a (разыменование)

int m[50]; // массив из 50 элементов. m при этом является указателем
При обращении к элементу фактически m[7] = *(m+7), т.е. к адресу m добавляется 7 размеров типа int (7*4), и по этому адресу происходит чтение (разыменование).

struct a { int x; }; // структура из одного элемента
struct b { a y; }; // тоже структура из одного элемента
b z; // объект этой структуры
z.y.x = 5; // обращение к самому вложенному элементу

b *t = &z; // указатель на объект структуры
t->y.x = 5; // обращение к элементу

Вообще говоря, a->b = (*a).b
Т.е. стрелочка это разыменование и обращение к элементу получившейся структуры. Так как результат не указатель, при обращении к элементу получившейся структуры используется точка.

Reply

udpn October 22 2011, 18:02:08 UTC
Ну и ещё майндфак.
int a, b;
Это всё равно что
int a;
int b;
А теперь сам майндфак.
int* a, b;
это
int* a;
int b;
Так что если нужно два указателя, нужно писать
int *a, *b;
Если увидишь где-нибудь звёздочку рядом с int, бей в рожу. Пример выше не считается.

Reply

evilduckk October 22 2011, 18:20:33 UTC
Да, этот прикол в Си мне уже разъяснили, спасибо.

Reply

udpn October 24 2011, 06:02:27 UTC
1. В чем разница?
*a=&b
здесь а должно иметь тип int**. здесь ты кладёшь адрес b в значение, находящееся по адресу а. если ты хотела положить адрес b в а, нужно было так и писать: a = &b.

2. Что за бред с массивами?
array[20] - ссылка на 20-й элемент массива, точнее в терминах Си - l-value.
т.е. можно писать как
array[20] = 5;
так и
a = array[20];
*array[20] - имеет смысл если у тебя массив указателей, и ты разыменовываешь 20-й из них. если ты хотела получить адрес 20-го элемента (т.е. указатель на 20й элемент), нужно было писать &array[20]

*s2 - разыменование указателя на структуру s2.

Reply


microxcuts December 1 2011, 14:36:55 UTC
Я тоже не могла понять все эти указатель и массивами год назад, когда изучала их. Сейчас тоже иногда неуверена что-кде-как...

Reply


Leave a comment

Up