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

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

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

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

28.11.2011, 16:03. Просмотров 6292. Ответов 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]и т.п.
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(); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alkagolik
Заблокирован
30.11.2011, 20:04 #76
Цитата Сообщение от Bers Посмотреть сообщение
какое это имеет отношение к теме?
а темы уже давно нет, вам уже стопицот раз показали что никаких явных или неявных указателей не бывает. Есть указатель и точка, он имеет свойства, признаки, но не виды (явный, неявный).
Bers
Заблокирован
30.11.2011, 20:14 #77
Цитата Сообщение от alkagolik Посмотреть сообщение
а темы уже давно нет, вам уже стопицот раз показали что никаких явных или неявных указателей не бывает. Есть указатель и точка, он имеет свойства, признаки, но не виды (явный, неявный).
Если б ты поменьше философствовал о всяких триггерах ЗУ, и больше уделял внимание русскому тексту, то ты бы заметил, что человек который сказал:

Цитата Сообщение от Bers Посмотреть сообщение
Да причем тут терминология вообще? Указатель, который создаётся неявно - это блин, неявный указатель. Указатель, который создаётся явно - явный.
или вот это:

Цитата Сообщение от Bers Посмотреть сообщение
Явный указатель, или неявный указатель - это не термины, это описания указателей)
Был я сам. С теперь сравни с собственным творчеством:

Цитата Сообщение от alkagolik Посмотреть сообщение
Есть указатель и точка, он имеет свойства, признаки, но не виды (явный, неявный).
Если до тебя ещё что-то не допирает, то подозреваю, что у тебя просто проблемы с восприятием русского текста. Потому что ты сейчас говоришь мне тоже самое, что я сам сказал вам всем несколькими страничками ранее.
alkagolik
Заблокирован
30.11.2011, 20:27 #78
суров. Не кипятись, колонки распирает от крика.
Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
01.12.2011, 11:43 #79
а темы уже давно нет, вам уже стопицот раз показали что никаких явных или неявных указателей не бывает. Есть указатель и точка, он имеет свойства, признаки, но не виды (явный, неявный).
Только что в универе подходил к преподавателю С++. Явный и неявный действительно условные названия, однако ими почему-то все пользуются. Ну, возможно, кроме тех, кто знает все стандарты наизусть

C++
1
2
3
4
5
6
7
8
9
10
void f1(int *A, int *s)  {
 ...
 *s = A[1];
... 
}
 
void main() {
  ...
  f1(A, s);
}
C++
1
2
3
4
5
6
7
8
9
10
void f2(int *A, int &s) {
  ...
  s = A[1];
  ...
}
 
void main() {
  ...
  f2(A, s);
}
Найдите отличия) Во втором случае как раз и происходит неявное разыменование, то есть s - то, что простые смертные называют неявным или скрытым указателем.
Bers
Заблокирован
01.12.2011, 11:47 #80
Цитата Сообщение от Гоблин Посмотреть сообщение
то есть s
это ссылка)
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
01.12.2011, 11:50 #81
Цитата Сообщение от Гоблин Посмотреть сообщение
Только что в универе подходил к преподавателю С++
Цитата Сообщение от Гоблин Посмотреть сообщение
то есть s - то, что простые смертные называют неявным или скрытым указателем
Фэйспалм
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.12.2011, 11:54 #82
Цитата Сообщение от Гоблин Посмотреть сообщение
Только что в универе подходил к преподавателю С++.
С такими преподавателями и враги не нужны...

Добавлено через 44 секунды
Вот что бывает, когда учат Си, для последующего изучения С++. Пытаются подогнать новые знания под старые понятия...
BRcr
4008 / 2297 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
01.12.2011, 12:55 #83
Цитата Сообщение от Гоблин Посмотреть сообщение
Найдите отличия) Во втором случае как раз и происходит неявное разыменование, то есть s - то, что простые смертные называют неявным или скрытым указателем.
Смело бросайте в вашего препода камнем, так как он обозвал мальчика девочкой...
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
01.12.2011, 15:09 #84
Цитата Сообщение от Гоблин Посмотреть сообщение
Явный и неявный действительно условные названия, однако ими почему-то все пользуются.
Нифига подобного. Явный - это тот, который прописан в исходнике, а неявный - тот, что в коде существует, но в исходнике его не видно. И ни каких условностей.

Добавлено через 2 минуты
Цитата Сообщение от Гоблин Посмотреть сообщение
Найдите отличия) Во втором случае как раз и происходит неявное разыменование, то есть s - то, что простые смертные называют неявным или скрытым указателем.
Ну и где ж оно у тебя неявное то, когда оно явно прописано в теле функции?

Добавлено через 2 минуты
Цитата Сообщение от alkagolik Посмотреть сообщение
я вас разочарую, всякие там "переменные" или "объекты" существуют лишь в теории на приктике же есть память и ее адрес и всьо.
Ты где это вообще откопал?
C++
1
2
3
4
5
class A
{
 ...
};
A a;// Объект. Вполне существующий в таком коде. И на практике как раз пишут именно так. Адрес же этого объекта как раз существует только на низком уровне, да в теории.
Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
01.12.2011, 15:34 #85
Цитата Сообщение от Bers Посмотреть сообщение
это ссылка)
Несовсем. Ссылку вернет &s, а вот s в теле функции будет работать как указатель.
Цитата Сообщение от taras atavin Посмотреть сообщение
Нифига подобного. Явный - это тот, который прописан в исходнике, а неявный - тот, что в коде существует, но в исходнике его не видно. И ни каких условностей.
Ну так верно ведь говорите! О чем тогда спор?..
Цитата Сообщение от taras atavin Посмотреть сообщение
Ну и где ж оно у тебя неявное то, когда оно явно прописано в теле функции?
Поясняю. Поправьте, если буду неправ.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <conio.h>
#include <stdio.h>
 
void func(int *A, int &s) {
  s = A[1];
}
 
void main() {
  int s = 0;
  int *A = new int [2];
  A[0] = 0;
  A[1] = 1;
  A[2] = 2;
  func(A,s);
  printf("%d",s);
  getch();
  delete []A;
}
В этом примере функция func изменит значение s. А как, если у функция ничего не возвращает и в саму функцию мы передаем только адрес переменной?
Насколько я понимаю, в строке s = A[1]; компилятор как раз будет обращаться к указателю на переменную s, то есть разыменовывание будет происходить неявно. То есть в шапке фактически написано *s = &ToChtoPeredanoVFunkciоu. Или я не прав? В конечном счете значение массива заносится по адресу переменной переданной в функцию, а не в переменную. Со ссылкой насколько я помню такой прием не пройдет.

Добавлено через 2 минуты
Цитата Сообщение от taras atavin Посмотреть сообщение
Ты где это вообще откопал?
Насколько я понимаю как раз об этом речь и шла: классы это всего лишь программные конструкции, в конечном итоге объект это ссылка на начало объекта в памяти.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
01.12.2011, 16:58 #86
Цитата Сообщение от Гоблин Посмотреть сообщение
а вот s в теле функции будет работать как указатель.
Как ссылка.

Добавлено через 1 минуту
Цитата Сообщение от Гоблин Посмотреть сообщение
компилятор как раз будет обращаться к указателю на переменную s, то есть разыменовывание будет происходить неявно
Разыменование - это синтаксическая конструкция, она не возможна неявно. На низком же уровне вообще нет ни каких разыменований, а есть два способа доступа к памяти: прямой и косвенный. Косвенный - это по адресу в данном, прямой - по адресу в коде.

Добавлено через 3 минуты
Цитата Сообщение от Гоблин Посмотреть сообщение
Насколько я понимаю как раз об этом речь и шла: классы это всего лишь программные конструкции, в конечном итоге объект это ссылка на начало объекта в памяти.
Так говорить не правильно. Ссылка может быть только на переменную, но не на адрес. В крайнем случае ссылка на указатель, а уже его значение есть адрес. И в ИТ вообще не существует ничего, кроме аппаратного обеспечения и программных конструкций. И от того, что последние - лишь информация, ничего принципиально не меняется. Информация столь же реальна, как и вещество, энергия, время и пространство. Информация - пятая сущность. Идеальная, но равная четырём остальным. И если в одном из представлений программы, да ещё и в исходном ко всему прочему, существуют имена переменных, значит и имена эти реальны, так как любые представления чего бы то ни было - информация.

Добавлено через 12 минут
Информация есть любые сведения о мире, реальном, или вымышленном, не зависимо от их истинности, или ложности.
Сведения могут быть ложными, то есть не соответствовать действительности того мира, к которому относятся, но само высказывание, записанное, или произнесённое, реально существует.
Гоблин
1 / 1 / 0
Регистрация: 17.10.2010
Сообщений: 29
01.12.2011, 17:05 #87
Цитата Сообщение от taras atavin Посмотреть сообщение
Как ссылка.
Погуглил, проверил... Действительно ссылка. Пардон.
alkagolik
Заблокирован
01.12.2011, 20:56 #88
Цитата Сообщение от taras atavin Посмотреть сообщение
Нифига подобного. Явный - это тот, который прописан в исходнике, а неявный - тот, что в коде существует, но в исходнике его не видно. И ни каких условностей.
ссылку на официальный текст.

Добавлено через 6 минут
Цитата Сообщение от taras atavin Посмотреть сообщение
Ты где это вообще откопал?
я порсто когда читаю что-то вроде "создаем объект в памяти" или "у нас в памяти есть переменная" то невольно меня "коробит", т.к. объект или переменная это и есть область памяти, но это опять же не по теме.
Bers
Заблокирован
01.12.2011, 21:36 #89
Цитата Сообщение от alkagolik Посмотреть сообщение
ссылку на официальный текст.
Ты похоже в танке.

Ну бывает да.. вроде бы поговорили, разобрались. Человек вроде бы даже сам осознал, что "явность/неявность" к терминологии отношения не имеет.
Проходят сутки, и он начинает тупить опять на ту же самую тему.

Добавлено через 7 минут
Цитата Сообщение от alkagolik Посмотреть сообщение
порсто когда читаю что-то вроде "создаем объект в памяти" или "у нас в памяти есть переменная" то невольно меня "коробит", т.к. объект или переменная это и есть область памяти,
C++
1
Some* ptr = new Some; //я вот так создаю объект в динамической памяти? А ты?
Ты понятия не попутал? Ну там, ассмеблер с ООП в голове не перепутались?
alkagolik
Заблокирован
01.12.2011, 22:07 #90
Bers, ты главное не кипятись. Твой пример говорит компилятору не "создай мне объект в куче", а "дай память для *ptr, дай sizeof(Some) памяти из кучи, положи адрес начала участка в ячейку с адресом ptr ". На ооп свет клином не сходится.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2011, 22:07
Привет! Вот еще темы с ответами:

Использование функций при работе с двумерными массивами - 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
Объявления
01.12.2011, 22:07
Закрытая тема Создать тему
Опции темы

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