Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
#1

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

29.12.2011, 15:17. Просмотров 446. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2011, 15:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массивы и указатели. (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.12.2011, 15:34 #2
Цитата Сообщение от 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 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
29.12.2011, 17:32  [ТС] #3
Цитата Сообщение от soon Посмотреть сообщение
Массив.

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

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

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

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


Спасибо большое! А ты не мог бы еще пояснить, для чего в этой коде вводится указатель и как он здесь работает. Заранее огромное спасибо !
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.12.2011, 17:43 #4
Цитата Сообщение от 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 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
29.12.2011, 17:49  [ТС] #5
Цитата Сообщение от 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
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
29.12.2011, 18:15 #6
Цитата Сообщение от 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2011, 18:15
Привет! Вот еще темы с ответами:

Указатели и массивы - C++
Программа должна заменить все элементы массива с отрицательными значениями средним арифметическим значением всех положительных элементов....

Указатели и массивы - C++
Привет всем. Объясните пожалуйста int* v; int**v; Чем они эквивалентны?

Массивы и указатели - C++
Создать функцию, подсчитывающую количество отрицательных элементов одномерного массива, порядковый номер которых меньше номера минимального...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.12.2011, 18:15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru