Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1

Массивы и указатели.

29.12.2011, 15:17. Показов 722. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните как работает код, что он будет выводить на экран и почему :

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
26
27
#include <stdio.h>
#define PRD(a) printf("%d", (a) ) // Print decimal
#define NL printf("\n"); // Print new line
// Create and initialse array
int a[]={0, 1, 2, 3, 4};
int main()
{
int i;
int* p;
for (i=0; i<=4; i++) PRD(a[i]); // 1
NL;
for (p=&a[0]; p<=&a[4]; p++) PRD(*p); // 2
NL;
NL;
for (p=&a[0], i=0; i<=4; i++) PRD(p[i]); // 3
NL;
for (p=a, i=0; p+i<=a+4; p++, i++) PRD(*(p+i)); // 4
NL;
NL;
for (p=a+4; p>=a; p--) PRD(*p); // 5
NL;
for (p=a+4, i=0; i<=4; i++) PRD(p[-i]); // 6
NL;
for (p=a+4; p>=a; p--) PRD(a[p-a]); // 7
NL;
return 0;
}
С наступающем !
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.12.2011, 15:17
Ответы с готовыми решениями:

Отсортировать массив и вывести на экран (массивы и указатели на указатели)
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц)
Для каждого элемента , bij, i= 1,...,n , j=1,...,n определяется свой многоугольник местонахождением соответствующего элемента aij (см....

Указатели на массивы. Указатели и функции
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...

5
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.12.2011, 15:34
Цитата Сообщение от Leeto Посмотреть сообщение
for (i=0; i<=4; i++) PRD(a[i]); // 1
NL;
Массив.
Цитата Сообщение от Leeto Посмотреть сообщение
for (p=&a[0]; p<=&a[4]; p++) PRD(*p); // 2
NL;
Снова массив.
Цитата Сообщение от Leeto Посмотреть сообщение
for (p=&a[0], i=0; i<=4; i++) PRD(p[i]); // 3
NL;
И вновь массив
Цитата Сообщение от Leeto Посмотреть сообщение
for (p=a, i=0; p+i<=a+4; p++, i++) PRD(*(p+i)); // 4
NL;
Элементы массива на нечетных позициях.
Цитата Сообщение от Leeto Посмотреть сообщение
for (p=a+4; p>=a; p--) PRD(*p); // 5
NL;
for (p=a+4, i=0; i<=4; i++) PRD(p[-i]); // 6
NL;
for (p=a+4; p>=a; p--) PRD(a[p-a]); // 7
NL;
Массив в обратном поярдке 3 раза.
0
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
29.12.2011, 17:32  [ТС]
Цитата Сообщение от soon Посмотреть сообщение
Массив.

Снова массив.

И вновь массив

Элементы массива на нечетных позициях.

Массив в обратном поярдке 3 раза.


Спасибо большое! А ты не мог бы еще пояснить, для чего в этой коде вводится указатель и как он здесь работает. Заранее огромное спасибо !
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.12.2011, 17:43
Цитата Сообщение от Leeto Посмотреть сообщение
для чего
Чтобы показать альтернативные способы работы с массивом.
Цитата Сообщение от Leeto Посмотреть сообщение
как он здесь работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (p=&a[0]; p<=&a[4]; p++) PRD(*p); // 2 - изначально указывает на 1 элемент массива, разыменовывется, переходит на следующий элемент
NL;
NL;
for (p=&a[0], i=0; i<=4; i++) PRD(p[i]); // 3 - тоже самое, но разворачивается примерно в следующее *(p + i), что эквивалентно *p из цикла #2 на i-ой итерации цикла
NL;
for (p=a, i=0; p+i<=a+4; p++, i++) PRD(*(p+i)); // 4 - За счет того, что увеличивается p и i будут выводиться элементы массива "через один"
NL;
NL;
for (p=a+4; p>=a; p--) PRD(*p); // 5 - изначально p указывает на последний элемент, разыменовывается, выводится, увеличивается
NL;
for (p=a+4, i=0; i<=4; i++) PRD(p[-i]); // 6 - аналогично #5, развернется в следующее *(p - i)
NL;
for (p=a+4; p>=a; p--) PRD(a[p-a]); // 7 - работа с массивом как обычно, но номер элемента расчитывается путем вычитания из адреса p адресa a
NL;
1
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
29.12.2011, 17:49  [ТС]
Цитата Сообщение от soon Посмотреть сообщение
Чтобы показать альтернативные способы работы с массивом.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (p=&a[0]; p<=&a[4]; p++) PRD(*p); // 2 - изначально указывает на 1 элемент массива, разыменовывется, переходит на следующий элемент
NL;
NL;
for (p=&a[0], i=0; i<=4; i++) PRD(p[i]); // 3 - тоже самое, но разворачивается примерно в следующее *(p + i), что эквивалентно *p из цикла #2 на i-ой итерации цикла
NL;
for (p=a, i=0; p+i<=a+4; p++, i++) PRD(*(p+i)); // 4 - За счет того, что увеличивается p и i будут выводиться элементы массива "через один"
NL;
NL;
for (p=a+4; p>=a; p--) PRD(*p); // 5 - изначально p указывает на последний элемент, разыменовывается, выводится, увеличивается
NL;
for (p=a+4, i=0; i<=4; i++) PRD(p[-i]); // 6 - аналогично #5, развернется в следующее *(p - i)
NL;
for (p=a+4; p>=a; p--) PRD(a[p-a]); // 7 - работа с массивом как обычно, но номер элемента расчитывается путем вычитания из адреса p адресa a
NL;

Спасибо огромное, soon, разжевал=)

С наступающим тебя !
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
29.12.2011, 18:15
Цитата Сообщение от soon Посмотреть сообщение
for (p=a+4, i=0; i<=4; i++) PRD(p[-i]); // 6 - аналогично #5, развернется в следующее *(p - i)
NL;
soon, я могу ошибаться, но в 64-битных системах мы можем выйти за пределы массива.

Добавлено через 1 минуту
Хотя нет, не заметил
C++
1
int i;
ошибка будет если unsigned
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.12.2011, 18:15
Помогаю со студенческими работами здесь

Указатели и массивы. Указатели и функции
Никак не разберусь с указателями на функцию. Пишу в Visual Studio. Надо написать функцию Compress() с использованием указателей, которая...

Структуры, массивы, указатели, динамические массивы структур
Помогите с решением задачи (прикрепляю условие). Заранее спасибо.

массивы указателей,указатели на массивы
Понимаю что тема эта изжевана, но я ещё жую.Хочу, чтобы усвоилось. допустим есть QStringList a; a.append(&quot;мамa&quot;); ...

массивы указателей,указатели на массивы
Понимаю что тема эта изжевана, но я ещё жую.Хочу, чтобы усвоилось. допустим есть QStringList a; a.append(&quot;мамa&quot;); ...

указатели и массивы
Из всех языков программирования с которыми мне приходилось в процессе работы работать (тафтология) с++ (плюсы) я всегда избегал, интуитивно...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru