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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2013, 19:30   #11
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Сообщение от voodooism Посмотреть сообщение
Мне немного не понятен синтаксис
Код:
int tmp = *((int*) a + i);
tmp == *((int*) a + z)
Вместо этого можно написать ?
Код:
int tmp=a[i];
tmp==a[z];
или нет?
Нет, нельзя. Противоречит объявлению a[n][m].
А зачем? Может проще понять арифметику указателей?
Тогда уж так: int tmp = ((int*) a ) [i];

PS.
т.к. писал на скору руку, не предусмотрел случай,
если все элементы равны INT_MIN
или
все элементы кроме одного равны INT_MIN
Но это мелочь, добавление одного условия if.
EUGY вне форума Ответить с цитированием
Старый 23.01.2013, 19:49   #12
voodooism
 
Регистрация: 23.01.2013
Сообщений: 6
По умолчанию

Я понял что использование такого синтаксиса обязательно, если использовать просто a[i] - неработает. Но смысла непонимаю к сожалению.
и по ключевому слову " *((int*) a + i)" ничего не гуглится
voodooism вне форума Ответить с цитированием
Старый 23.01.2013, 20:10   #13
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Ну да, это помнится, одна из первых засад, которые надо преодолеть.
Смысл такой (своими словами):
Любой массив int a[n], int a[n][m], int a[n][m]..[z]
занимает непрерывную область памяти, длина этого блока памяти равна
длине в байтах одного элемента помноженного на произведение размерностей.
У массива есть первый (нулевой) элемент: a[0][0];
Его адрес int* pa = &a[0][0];
Синтаксис си позволяет обратится к адресу этого нулевого элемента просто
int* pa = (int*)a;

А раз мы знаем адрес нулевого нулевого элемента, то адреса последующих элементов : pa+1, pa+2, ....
Зная адрес любого элемента, можно прочитать значение по этому адресу, разыменовывая указатель: *(pa + 2)
PS. Указатель - это переменная содержащая адрес.

Последний раз редактировалось EUGY; 23.01.2013 в 20:14.
EUGY вне форума Ответить с цитированием
Старый 23.01.2013, 20:12   #14
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Адресная арифметика....
адрес 564ADF45 допустим... 32 разрядное число... ... его можно умножать делить вычитать и прибавлять и даже возводить в степень.... обычно прибавляют..... это очень быстрый способ получение содержимого по адресу... ибо оператор ваш.... делает чтото типо pointer+(size*pos). умножение медленно.... для получение содержимого используют *до указателя.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 23.01.2013, 20:23   #15
voodooism
 
Регистрация: 23.01.2013
Сообщений: 6
По умолчанию

Спасибо огромное за объяснения! Я кажется понял:
tmp = *((int*) a + i);
Переменной "tmp" присваиваем значение хранящееся по адресу "(int*)a+i" , предварительно разыменовав его, чтобы получить не адрес памяти, а значение которое в нем хранится.
Правильно?
voodooism вне форума Ответить с цитированием
Старый 23.01.2013, 20:33   #16
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
Сообщение от voodooism Посмотреть сообщение
Спасибо огромное за объяснения! Я кажется понял:
tmp = *((int*) a + i);
Переменной "tmp" присваиваем значение хранящееся по адресу "(int*)a+i" , предварительно разыменовав его, чтобы получить не адрес памяти, а значение которое в нем хранится.
Правильно?
Совершенно верно.
EUGY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны числа а1,..,а60. Организовать новый массив из тех чисел, которые входят в последовательность более одного раза (С) Мишаня@ Помощь студентам 0 01.12.2012 22:01
Максимальное из чисел встречающих в заданной матрице более одного раза Seo-optimist Общие вопросы C/C++ 11 25.10.2010 21:44
Максимальное из чисел встречающих в заданной матрице более одного раз Seo-optimist Помощь студентам 1 25.10.2010 15:13
Целочисленный массив. Элементы, которые встречаются более одного раза! Алина18 Помощь студентам 2 21.10.2010 08:10
поиск максимального элемента, который встречается более одного раза счастливая Помощь студентам 1 25.05.2010 16:41