Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
307 / 20 / 4
Регистрация: 01.05.2010
Сообщений: 250
1

Определение индекса массива в цикле при использовании указателей

14.11.2012, 14:58. Показов 3713. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Вопрос, в общем-то, ламерский, но что-то сам дотумкать не могу.

Есть код, где заполняю одномерный массив элементами, используя указатели
C
1
2
int m[3];
for(int *i=&m[0]; i<&m[3]; i++) scanf("%d ", i);
Как обратиться к i-ому элементу понятно:
C
1
printf("%d", *(&m[0]+i));
Но не могу понять, каким образом можно отследить индекс массива в цикле. Т.е. проходим по всему массиву через указатели и нужно вывести, допустим, только второй элемент массива. Для этого на каждом шаге нужно знать индекс, чтобы сделать условие, но как его узнать? Есть вариант следующий - брать адрес первого элемента, адрес i-ого, вычитать второе из первого и поделить на размерность ячейки памяти. Но рационально ли это?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2012, 14:58
Ответы с готовыми решениями:

Определение длины массива при использовании LINQ
Здравствуйте, форумчане, проблема с определением длины массива после сортировки с помощью языка...

Ошибка при использовании указателей
Задание Составить программу, которая заполняет массив случайными целыми числами из диапазона,...

Определение максимума массива и его индекса
Ребят помогите написать задачу по Паскалю. Буду очень признателен. Заранее спасибо) Определение...

Определение индекса массива в бинарном поиске
Мой вопрос больше к математикам, чем к программистам, поэтому написал сюда. В бинарном поиске...

6
224 / 219 / 77
Регистрация: 24.09.2012
Сообщений: 511
Записей в блоге: 2
14.11.2012, 15:45 2
А может не делать индекс цикла указателем.

Если здесь у вас i тоже указатель, то получается вы к адресу прибавляете адрес, а нужно прибавлять дельту между двумя соседними.
C
1
printf("%d", *(&m[0]+i));
Если я ошибаюсь, поправьте.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
14.11.2012, 16:25 3
Представленный цикл сам по себе не рационален, поэтому можно так как ты хотел: index = i - &m[0];
1
307 / 20 / 4
Регистрация: 01.05.2010
Сообщений: 250
14.11.2012, 16:27  [ТС] 4
Цитата Сообщение от lazybiz Посмотреть сообщение
Представленный цикл сам по себе не рационален, поэтому можно так как ты хотел: index = i - &m[0];
подскажете, как сделать рациональным?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
14.11.2012, 16:34 5
Цитата Сообщение от AK3RN Посмотреть сообщение
подскажете, как сделать рациональным?
Подскажите, что от него требуется и для чего он нужен?
1
307 / 20 / 4
Регистрация: 01.05.2010
Сообщений: 250
14.11.2012, 16:39  [ТС] 6
Цитата Сообщение от lazybiz Посмотреть сообщение
Подскажите, что от него требуется и для чего но нужен?
Есть одномерный массив, с которым можно работать только при помощи указателей. Нужно найти, учитывая определенное условие, элемент в массиве и запомнить его индекс. Допустим, найти индекс минимального элемента в массиве. Как запомнить этот индекс, используя только указатели?
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
14.11.2012, 16:49 7
Я поторопился с ответом. Это самый рациональный вариант на мой взгляд.
C++
1
2
3
4
5
6
    int a[10];
    for ( int *i = a; i < a + 10; i++ ) {
        if ( ... ) {
            printf( "index: %d\n", i - a );
        }
    }
1
14.11.2012, 16:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2012, 16:49
Помогаю со студенческими работами здесь

Определение индекса наибольшего элемента массива
Помогите составить программу: Одномерный массив задаётся пользователем. Составьте программу...

Увеличение индекса в цикле при каждом заходе в функцию
Добрый день столкнулся с маленькой проблемкой код ниже немогу чёта понять почему у меня не...

Некорректная работа при использовании динамических структур и указателей
Помогите, пожалуйста, разобраться в проблеме. Функция выполняется корректно, результаты даёт...

Проблемы при использовании указателей для работы со строками
#include &lt;iostream&gt; using namespace std; int main() { char src; cin &gt;&gt; src; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru