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

Как использовать указатели при работе с массивами? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.65
chainiksi
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 25
28.11.2011, 16:03     Как использовать указатели при работе с массивами? #1
подскажите пожалуйста как правильно использовать указатели при работе с массивами. Как написать этк программу используя указатели?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 #include<iostream>
 using namespace std;
 const int n = 10;
 int main()
 {
 int X[n] = {1,2,3,4,5,6,7,8,9,10};
 int Y[n]= {2,3,4,6,7,3,4,5,1,9,};
 int Z[n]= {1,2,3,4,5,6,7,8,9,0};
 int U[n];
 for (int i = 0; i < n; i++)
 {
 U[i]=X[i]+Y[i]-Z[i];
 cout<<U[i]<<" ";
 }
 cout << endl;
 system("pause");
 }
если я правильно понял *X - это тоже самое, что и X[0] , а как написать при помощи указателей к примеру X[4]и т.п.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2011, 16:03     Как использовать указатели при работе с массивами?
Посмотрите здесь:

C++ Использование указателей при работе с одномерными массивами
Указатели при работе с одномерными и двумерными массивами C++
C++ Ошибка в перегрузке оператора - при работе с массивами
C++ Не получается перегрузить оператор ++ при работе с массивами
C++ Ошибка при работе с массивами char
Как работают указатели с массивами C++
Использование указателей при работе с одномерными и двумерными массивами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
28.11.2011, 16:12     Как использовать указатели при работе с массивами? #2
C++
1
2
for (int i = 0; i < n; ++i)
    std::cout << *(array + i) << ' ';
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.11.2011, 16:19     Как использовать указатели при работе с массивами? #3
Цитата Сообщение от chainiksi Посмотреть сообщение
если я правильно понял *X - это тоже самое, что и X[0]
x[i] - это тоже самое, что *(x + i). Сначала указатель смещается на i позиций, а потом разыменовывается. Соответственно x[0] = *(x + 0) = *(x) = *x.
Гоблин
 Аватар для Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
28.11.2011, 16:19     Как использовать указатели при работе с массивами? #4
X[4] == *(X + 4)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 #include <conio.h>
 #include <iostream.h>
 const int n = 10;
 int main()
 {
 int X[n] = {1,2,3,4,5,6,7,8,9,10};
 int Y[n] = {2,3,4,6,7,3,4,5,1,9,};
 int Z[n] = {1,2,3,4,5,6,7,8,9,0};
 int *U; //указатель на массив
 U = new int [n]; // выделяем память под массив
 int *i, *ix = &X[0], *iy = &Y[0], *iz = &Z[0];
 for (i = U; i < U + n; i++)
 {
   *i = *ix + *iy - *iz;
   cout << *i <<" ";
   ix++;
   iy++;
   iz++;
 }
 cout << endl;
 system("pause");
 delete U; //освобождаем память 
 }
То есть переход к следующему элементу осуществляется простым инкрементом. Компилятор сам перескакивает на нужное число байт.

Строка
C++
1
 int *i, *ix = &X[0], *iy = &Y[0], *iz = &Z[0];
сугубо для твоего примера. Что бы не заполнять массив вручную (как это надо было бы для U) я объявляю новые указатели и заношу в них адреса начала массива. Адрес начала массива содержится в самом идентификаторе массива, или X[0] - первый элемент. То есть *X - обратиться по адресу X, &X - получить адресX. В самом указателе X будет храниться адрес. Как-то так)
Bers
Заблокирован
28.11.2011, 16:26     Как использовать указатели при работе с массивами? #5
Цитата Сообщение от Гоблин Посмотреть сообщение
delete U; //освобождаем память
косяк - "поцелуйся с неизвестным поведением"
Гоблин
 Аватар для Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
28.11.2011, 16:29     Как использовать указатели при работе с массивами? #6
косяк - "поцелуйся с неизвестным поведением"
Borland C++ Builder 6. Все работает. Возможно, что-то не так с настройками компилятора?
Bers
Заблокирован
28.11.2011, 16:30     Как использовать указатели при работе с массивами? #7
Цитата Сообщение от Гоблин Посмотреть сообщение
Borland C++ Builder 6. Все работает. Возможно, что-то не так с настройками компилятора?
"неизвестное поведение" означает "непредсказуемые последствия".
В вашем случае - вам тупо повезло.

Когда мальчики тупят, им на помощь приходят девочки:
http://alenacpp.blogspot.com/2008/01/delete.html
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.11.2011, 16:34     Как использовать указатели при работе с массивами? #8
Цитата Сообщение от Гоблин Посмотреть сообщение
Все работает
delete [] U;
Гоблин
 Аватар для Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
28.11.2011, 16:34     Как использовать указатели при работе с массивами? #9
Цитата Сообщение от Bers Посмотреть сообщение
"неизвестное поведение" означат "непредсказуемые последствия".
В вашем случае - вам тупо повезло.
Не могли бы вы подробнее рассказать в чем именно везение? Я выделил память - я удалил память.
Простого delete'а вполне достаточно
А delete[] используется когда удаляется массив объектов.
chainiksi
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 25
28.11.2011, 16:34  [ТС]     Как использовать указатели при работе с массивами? #10
Гоблин, но мой компилятор выдает 1 ошибку и 1 предупреждение
Bers
Заблокирован
28.11.2011, 16:36     Как использовать указатели при работе с массивами? #11
Цитата Сообщение от Гоблин Посмотреть сообщение
Не могли бы вы подробнее рассказать в чем именно везение?
Как выделяли явно память, так её и удаляем.
А в противном случае - отладчик ваш лучший друг. Особенно при портировании кода под другой компилятор.

Добавлено через 19 секунд
chainiksi, дык, о чем и речь.
chainiksi
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 25
28.11.2011, 16:37  [ТС]     Как использовать указатели при работе с массивами? #12
хотя у меня не борланд, а визуал С++ может из за этого
Bers
Заблокирован
28.11.2011, 16:39     Как использовать указатели при работе с массивами? #13
Цитата Сообщение от chainiksi Посмотреть сообщение
хотя у меня не борланд, а визуал С++ может из за этого
Из-за того, что Гоблин привел косячный код.

Добавлено через 1 минуту
Цитата Сообщение от Гоблин Посмотреть сообщение
U = new int [n]; // выделяем память под массив
Цитата Сообщение от Гоблин Посмотреть сообщение
delete U; //освобождаем память
Цитата Сообщение от Гоблин Посмотреть сообщение
А delete[] используется когда удаляется массив объектов.

Ничего такого странного не наблюдаете?
chainiksi
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 25
28.11.2011, 16:41  [ТС]     Как использовать указатели при работе с массивами? #14
получается память по другому надо освободить?
Bers
Заблокирован
28.11.2011, 16:43     Как использовать указатели при работе с массивами? #15
chainiksi, гугли "описание оператор new/delete с++"
 Комментарий модератора 
Правила форума CyberForum.ru
4.2 Не отсылайте других пользователей в поиск и избегайте ссылок на поисковые системы (Google, Yandex и др.). Самостоятельно найдите ответ на вопрос и разместите его на форуме.
chainiksi
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 25
28.11.2011, 16:43  [ТС]     Как использовать указатели при работе с массивами? #16
не подскажете где можно скачать хорошую среду для С++? у меня визуал 6.0. хорошо работает , но не показывает в каких строках ошибки.
Bers
Заблокирован
28.11.2011, 16:45     Как использовать указатели при работе с массивами? #17
Цитата Сообщение от chainiksi Посмотреть сообщение
не подскажете где можно скачать хорошую среду для С++? у меня визуал 6.0. хорошо работает , но не показывает в каких строках ошибки.
А у меня почему то все показывает. Достаточно щелкнуть на само сообщение ошибки компилятора.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.11.2011, 16:45     Как использовать указатели при работе с массивами? #18
Цитата Сообщение от chainiksi Посмотреть сообщение
у меня визуал 6.0. хорошо работает , но не показывает в каких строках ошибки.
Всё он показывает. Просто ты окно ошибок не открыл.
chainiksi
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 25
28.11.2011, 16:50  [ТС]     Как использовать указатели при работе с массивами? #19
может совсем тупой вопрос но я методом тыка искал но что то не нашел
Цитата Сообщение от Deviaphan Посмотреть сообщение
Всё он показывает. Просто ты окно ошибок не открыл.
как его открыть
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2011, 16:54     Как использовать указатели при работе с массивами?
Еще ссылки по теме:

C++ Использование функций при работе с двумерными массивами
C++ Проблемма при работе с массивами структур
Ошибка с памятью при работе с двумерными массивами. C++
C++ Invalid floating point operation при работе с массивами
C++ Указатели при работе со строками char*

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.11.2011, 16:54     Как использовать указатели при работе с массивами? #20
Ctrl + E

Добавлено через 54 секунды
Ой, не так!
Ctrl + \, E

сперва слэш, потом Е
Yandex
Объявления
28.11.2011, 16:54     Как использовать указатели при работе с массивами?
Закрытая тема Создать тему
Опции темы

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