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

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

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

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

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

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

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

Указатели и массивы - C++
Если у меня есть две функции, в одной из которых объявлен динамический массив и указатель на него.А во второй функции входным параметром...

Указатели и массивы - C++
Помогите переделать через указатель int *x. #include&lt;iostream.h&gt; #include&lt;string.h&gt; #include&lt;conio.h&gt; main() { clrscr(); ...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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 раза.
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
29.12.2011, 17:32  [ТС]     Массивы и указатели. #3
Цитата Сообщение от soon Посмотреть сообщение
Массив.

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

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

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

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


Спасибо большое! А ты не мог бы еще пояснить, для чего в этой коде вводится указатель и как он здесь работает. Заранее огромное спасибо !
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;
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, разжевал=)

С наступающим тебя !
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2011, 18:15     Массивы и указатели.
Еще ссылки по теме:

одномерные массивы и указатели - C++
помогите пожалуйста написать программу: в одномерном массиве, состоящем из n элементов, вычислить: 1) номер минимального по модулю...

C++. Массивы и указатели/ Функции. - C++
Помогите, пожалуйста, решить!!! Я знаю, что это просто. Но я только начинаю изучать C. И до меня никак не доходит! №1. Написать два...

задача на массивы и указатели С++ - C++
Размерность массива 30. Диапозон значений (-20,20). Какое абсолютное значение встречается в массиве чаще остальных?(решать через указатели...

Про массивы и указатели - C++
#include &lt;iostream&gt; using namespace std; int Digit = { {1,8,6,7},{3,2,9,4},{5,1,2,7},{8,6,2,5} }, test; int main() { ...


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

Или воспользуйтесь поиском по форуму:
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
Yandex
Объявления
29.12.2011, 18:15     Массивы и указатели.
Ответ Создать тему
Опции темы

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