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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.65
chainiksi
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 25
#1

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

28.11.2011, 16:03. Просмотров 6326. Ответов 111
Метки нет (Все метки)

подскажите пожалуйста как правильно использовать указатели при работе с массивами. Как написать этк программу используя указатели?
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]и т.п.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2011, 16:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как использовать указатели при работе с массивами? (C++):

Указатели при работе с одномерными и двумерными массивами - C++
Помогите Даны натуральное число n, целые числа а1,...,аn . Выяснить, имеется ли среди чисел а1,...,аn совпадающие.

Проблемма при работе с массивами структур - C++
Разработать программу , позволяющую добавлять данные структур с указанными полями в массив, просматривать массивы, а также выполнять...

Ошибка при работе с массивами char - C++
Задание: написать функцию для сложения целых двоичных чисел. Слагаемые должны иметь тип unsigned char. Вот что получилось, но после...

Не получается перегрузить оператор ++ при работе с массивами - C++
Текст: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; class array { public: array(); ...

Ошибка с памятью при работе с двумерными массивами. - C++
{ int i, j, c, kol; n=StrToInt(Edit1-&gt;Text); m=StrToInt(Edit2-&gt;Text); for(i=0; i&lt;n; i++) { for(j=0; j&lt;m; j++)...

Ошибка в перегрузке оператора - при работе с массивами - C++
Текст программы: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; class array { public: array(); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
chainiksi
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 25
28.11.2011, 16:43  [ТС] #16
не подскажете где можно скачать хорошую среду для С++? у меня визуал 6.0. хорошо работает , но не показывает в каких строках ошибки.
0
Bers
Заблокирован
28.11.2011, 16:45 #17
Цитата Сообщение от chainiksi Посмотреть сообщение
не подскажете где можно скачать хорошую среду для С++? у меня визуал 6.0. хорошо работает , но не показывает в каких строках ошибки.
А у меня почему то все показывает. Достаточно щелкнуть на само сообщение ошибки компилятора.
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.11.2011, 16:45 #18
Цитата Сообщение от chainiksi Посмотреть сообщение
у меня визуал 6.0. хорошо работает , но не показывает в каких строках ошибки.
Всё он показывает. Просто ты окно ошибок не открыл.
0
chainiksi
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 25
28.11.2011, 16:50  [ТС] #19
может совсем тупой вопрос но я методом тыка искал но что то не нашел
Цитата Сообщение от Deviaphan Посмотреть сообщение
Всё он показывает. Просто ты окно ошибок не открыл.
как его открыть
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.11.2011, 16:54 #20
Ctrl + E

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

сперва слэш, потом Е
0
chainiksi
0 / 0 / 0
Регистрация: 15.11.2011
Сообщений: 25
28.11.2011, 16:56  [ТС] #21
однако у меня в окне ошибок тупо все неумещалось и надо было только ползунок поднять в окно просто не усещались все сообщения и я видел только prforumlb1.exe - 1 error(s), 1 warning(s) нажимал на них а они не показывали строку
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.11.2011, 16:59 #22
Ты ещё и не в том окне смотришь...
0
Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
29.11.2011, 13:40 #23
Да, я что-то перепутал. На самом деле delete удаляет только память под сам указатель, а delete[] удаляет еще и то, на что ссылкается указатель. Пардоньте за ломаные объяснения.
C++
1
2
3
int *A = new int; // простой указатель
...
delete A; // правильное удаление, т.к. нужно удалить только А
C++
1
2
3
int *A = new int [10]; // массив
... // в том числе заполнение массива
delete []A;
Во втором случае правильно delete[] т.к. сначала очистится память под элементы массива, а потом только сам указатель на массив. Если тут использовать delete A то будет удален только указатель на массив, элементы же останутся в памяти. К слову, в современных компиляторах существуют так называемые "сборщики мусора", которые должны сгладить такую ошибку программиста и удалить элементы, однако как это работает я точно не знаю.

2Bers: Спасибо, что указали на ошибку, но было бы быстрее и проще сразу просто объяснить механизм работы оператора.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
29.11.2011, 13:55 #24
Цитата Сообщение от fasked Посмотреть сообщение
x[i] - это тоже самое, что *(x + i). Сначала указатель смещается на i позиций, а потом разыменовывается. Соответственно x[0] = *(x + 0) = *(x) = *x.
Так делается только при использовании X[i]. Вычислять же таким образом явный указатель смысла нет. Уж если хочешь юзить явно смещаемый указатель с массивом, то в цикле, инкрементя на каждом шагу сам указатель. А если не в цикле инкрементами/декремнетами, а сложение с индексом, то прячь адресную арифметику под оператор [].
1
Bers
Заблокирован
29.11.2011, 14:29 #25
Цитата Сообщение от Гоблин Посмотреть сообщение
2Bers: Спасибо, что указали на ошибку, но было бы быстрее и проще сразу просто объяснить механизм работы оператора.
Толку было бы мало.

А так, ты прочувствовал всю глубину этого деликатного момента, и теперь любому сможешь объяснить, как и почему нужно удалять.
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.11.2011, 14:32 #26
Цитата Сообщение от taras atavin Посмотреть сообщение
Вычислять же таким образом явный указатель
Что значит явный указатель?
0
alkagolik
Заблокирован
29.11.2011, 14:57 #27
Цитата Сообщение от fasked Посмотреть сообщение
Что значит явный указатель?
видимо имелось ввиду: фактический адрес памяти, которая хранит адрес памяти с данными. т.е. не так *( array + i ), а так ++array. Наверное чтобы это делать надо "набить руку" на указателях, чтобы осознавать что это и как работает. Чтобы легче было понять что такое указатели и зачем они нужны надо проштудировать способы\методы адресации данных в эвм. Среди них есть косвенная адресация, которая реализована в языке Си посредством указателей, так же есть индексная - тоже имеющая к ним непосредственное отношение. Ссылка ее недостаточно для изучения.
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.11.2011, 15:00 #28
Цитата Сообщение от alkagolik Посмотреть сообщение
++array
Я вроде и не говорил, что и когда лучше или хуже. Я говорил во что в итоге раскрывается адресация с помощью индекса.
0
alkagolik
Заблокирован
29.11.2011, 15:06 #29
fasked, не знаю, я предположил
0
Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
30.11.2011, 00:08 #30
Bers, Возможно. В любом случае спасибо за то, что указали на ошибку.

Что значит явный указатель?
Я где-то с этим сталкивался, но не помню совершенно что это значит. Нашел на википедии:
Языки программирования, в которых предусмотрен тип указателей, содержат, как правило, две основные операции над ними: присваивание и разыменование. Первая из этих операций присваивает указателю некоторый адрес. Вторая служит для обращения к значению в памяти, на которое указывает указатель. Разыменование может быть явным и неявным, в большинстве современных языков программирования разыменование происходит только при явном указании.
Либо поиском пользоваться разучился, либо действительно нет ничего вменяемого по теме. Может кто ни будь сможет объяснить что такое явный и неявный указатель?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2011, 00:08
Привет! Вот еще темы с ответами:

Использование функций при работе с двумерными массивами - C++
Дана прямоугольная вещественная матрица . Обнулить все четные столбцы и нечетные строки. В полученной матрице отсортировать по возрастанию...

Использование указателей при работе с одномерными массивами - C++
Реализовать на Си. Даны натуральное число n, действительные числа a1,...,an. Если последовательность a1,...,an упорядочена по...

Указатели при работе со строками char* - C++
Помогите разобраться с указателями #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; int main() { char*...

Как работают указатели с массивами - C++
Хочу на простом примере перестановки двух элементов уяснить - как работают указатели с массивами, но ничего не получается. Объясните на...


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

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

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