2 / 2 / 0
Регистрация: 07.12.2017
Сообщений: 29
1

Указатели и что с ними делать?

26.09.2018, 21:06. Показов 1577. Ответов 37

Author24 — интернет-сервис помощи студентам
Приветствую, жители форума. Неоднократно мне помогали, благодарю за это.
Сегодня начали изучать указатели и прочее, но мне абсолютно ни черта не понятно, так объясняют, что просто кошмар.

Есть ли толковые люди, которые помогут мне с этим?
Есть задача ( не скрываю, что прошу именно сделать её). Хотелось бы ещё комментарии к строкам, дабы я сам смог почитать их и сделать подобную сам. Я был бы очень признателен, т.к на следующей недели сдаю по указателям самостоятельные (а там по 4 задачи), нужно хотя бы с этой как-то разобраться. Ещё раз огромное спасибо, тем кто поможет

Задача:
Задан массив чисел, среди которых много нулевых элементов.
Создать массив, содержащий указатели на ненулевые элементы,
и другой массив, содержащий указатели на те элементы массива
указателей, которые указывают на положительные числа.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2018, 21:06
Ответы с готовыми решениями:

Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы
Заранее спасибо.

Типы ошибок(не синтактические) и что с ними делать.
Ошибки пользователя. Программа просит пользователя ввести число, а он вводит букву. В данном...

Почему в конце символьной строки появляются разные символы, и что с ними делать?
В строке, содержащей последовательность слов, найти конец предложения, обозначенный символом...

Указатели и работа с ними
Здравствуйте. Прочитал достаточно литературы по теме указатели, но где и как они используются...

37
30 / 21 / 8
Регистрация: 23.09.2018
Сообщений: 186
28.09.2018, 18:43 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от sourcerer Посмотреть сообщение
указатель - это просто концепция. Абстракция. Идея. И вот в чём она состоит:
Зачем информацию из учебников переписывать на форумах?
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
28.09.2018, 19:02 22
stu4ent, я объяснил своими словами, как знал, на тех примерах, которые показались мне уместными. Потому что у меня было время, силы, желание и возможность. Мне так захотелось.
Если речь о плагиате, то покажите мне учебник, в котором разбираются указатели на примере программы и ярлыка, указывающего на неё или отеля и придорожного указателя.
А что полезного сделали Вы? Попытались самоутвердиться за чужой счёт?
0
30 / 21 / 8
Регистрация: 23.09.2018
Сообщений: 186
28.09.2018, 19:17 23
Цитата Сообщение от sourcerer Посмотреть сообщение
Попытались самоутвердиться за чужой счёт?
Нет, я лишь поинтересовался, зачем тратить своё бесценное время, если можно отправить читать учебник.

Добавлено через 6 минут
Если он не хочет этого сделать, то почему вы решили, что он захочет читать что-то здесь?

Добавлено через 2 минуты
Цитата Сообщение от sourcerer Посмотреть сообщение
очень хорошее, на мой взгляд, объяснение концепции указателей находится в книжке
https://www.ozon.ru/context/detail/id/2480925/
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
28.09.2018, 19:48 24

Не по теме:

Цитата Сообщение от stu4ent Посмотреть сообщение
зачем тратить своё бесценное время
Я был на работе, от которой и отлынивал, листая форум. А отлынивал, потому что проболел неделю, с больничного выписали, а состояние всё равно не вполне здоровое - ещё слабость осталась и работать совсем не пёрло. Хотя немного пришлось. Пара клиентов приехала. Ну и начальство пару раз забегало, проверяло, как дела.



Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от stu4ent Посмотреть сообщение
Нет, я лишь поинтересовался
А, ну значит это у меня осеннее обострение паранойи. Прошу меня извинить за резкость.



Добавлено через 5 минут

Не по теме:

Цитата Сообщение от stu4ent Посмотреть сообщение
почему вы решили, что он захочет читать
В конце концов, контент останется на форуме. Не пригодится ТСу, пригодится кому-нибудь ещё.



Добавлено через 9 минут
Цитата Сообщение от skypex Посмотреть сообщение
Есть задача ( не скрываю, что прошу именно сделать её).
Вуаля:
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
28
29
//Задан массив чисел, среди которых много нулевых элементов.
//Создать массив, содержащий указатели на ненулевые элементы,
//и другой массив, содержащий указатели на те элементы массива
//указателей, которые указывают на положительные числа.
 
#include <iostream>
#include <vector>
 
int main ()
{
    using Item = int;
 
    std::vector<Item> arr {2, 0, 8, 6, 5, 0, 6, 0, 0, 9, 0, 3};
    std::vector<Item*> pointersToZeroElements;
    std::vector<Item*> pointersToNonZeroElements;
 
    for (auto & elem : arr)
        if (elem)
            pointersToNonZeroElements.push_back(&elem);
        else
            pointersToZeroElements.push_back(&elem);
 
    for (const auto & elem : pointersToNonZeroElements)
        std::cout << *elem << ' ';
    std::cout << '\n';
 
    for (const auto & elem : pointersToZeroElements)
        std::cout << *elem << ' ';
}
0
30 / 21 / 8
Регистрация: 23.09.2018
Сообщений: 186
29.09.2018, 01:00 25
К чему все эти сложности, можно же так. Есть память, она состоит из набора ячеек. Все переменные хранятся в различных ячейках памяти. Есть специальный класс переменных, называемых указателями. Каждая такая переменная содержит номер другой ячейки. К ячейкам можно обращаться с использованием их номера, т.е. с помощью указателя.
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
29.09.2018, 03:19 26
Цитата Сообщение от stu4ent Посмотреть сообщение
К ячейкам можно обращаться с использованием их номера, т.е. с помощью указателя.
С использованием числа, называемого адресом, и содержащемся в указателе.

И это не один класс, а набор классов, при необходимости автоматически генерируемый для любого из используемых типов или классов. Отличаются тем, как будет смещаться фактический адрес при арифметических операциях с указателем (что зависит от размера, занимаемого экземпляром класса).
0
30 / 21 / 8
Регистрация: 23.09.2018
Сообщений: 186
29.09.2018, 14:24 27
Цитата Сообщение от TRam_ Посмотреть сообщение
И это не один класс, а набор классов
Зависит от способа разбиения типов переменных на классы .

Добавлено через 48 секунд
Цитата Сообщение от TRam_ Посмотреть сообщение
С использованием числа, называемого адресом, и содержащемся в указателе.
В чём отличие номера ячейки от её адреса?
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
29.09.2018, 15:04 28
Вот вы тут много всего написали, а ТС скорее всего только и нужно чтоб программу кто-то за него написал.
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
29.09.2018, 15:09 29
Цитата Сообщение от Новичок Посмотреть сообщение
а ТС скорее всего только и нужно чтоб программу кто-то за него написал
Новичок, ТС свою программу получил, кстати.
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
29.09.2018, 15:41 30
Цитата Сообщение от stu4ent Посмотреть сообщение
В чём отличие номера ячейки от её адреса?
Примерно тем же, чем номер дома отличается от адреса дома. По первому дом можно найти, только предварительно узнав улицу и город. Второй самодостаточен.
0
30 / 21 / 8
Регистрация: 23.09.2018
Сообщений: 186
29.09.2018, 21:19 31
Цитата Сообщение от TRam_ Посмотреть сообщение
Примерно тем же, чем номер дома отличается от адреса дома. По первому дом можно найти, только предварительно узнав улицу и город. Второй самодостаточен.
Что за бред? Любой адрес можно заменить уникальным номером. Например, адрес город КиберФорум, улица C++, номер дома 131 может иметь номер: Z1-Z2-131 (Z1-номер города, а Z2 - номер улицы) .
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
29.09.2018, 22:08 32
stu4ent, ключевое - что можно заменить, а можно и не заменить. Так же как различие между необходимым и достаточным условием. Что по номеру элемента массива мы можем найти его элемент только имея доступ к массиву. А для получения элемента по указателю нам достаточно только провести операцию разыменования, которая не требует никаких других данных кроме собственно адреса в указателе и типа указателя (по которому определяется тип содержимого по адресу). Не спорю, в данном случае адрес выражается в виде числа или номера.
0
2 / 2 / 0
Регистрация: 07.12.2017
Сообщений: 29
06.10.2018, 15:09  [ТС] 33
Уххх. Спасибо за столь большую информацию, подскажите как запустить это всё дело?
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
28
29
//Задан массив чисел, среди которых много нулевых элементов.
//Создать массив, содержащий указатели на ненулевые элементы,
//и другой массив, содержащий указатели на те элементы массива
//указателей, которые указывают на положительные числа.
 
#include <iostream>
#include <vector>
 
int main ()
{
    using Item = int;
 
    std::vector<Item> arr {2, 0, 8, 6, 5, 0, 6, 0, 0, 9, 0, 3};
    std::vector<Item*> pointersToZeroElements;
    std::vector<Item*> pointersToNonZeroElements;
 
    for (auto & elem : arr)
        if (elem)
            pointersToNonZeroElements.push_back(&elem);
        else
            pointersToZeroElements.push_back(&elem);
 
    for (const auto & elem : pointersToNonZeroElements)
        std::cout << *elem << ' ';
    std::cout << '\n';
 
    for (const auto & elem : pointersToZeroElements)
        std::cout << *elem << ' ';
}
КодБлокс ругается, честно говоря тут я вообще нулевый в этом всё. Вроде дошло что-то но код не принимает(
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
06.10.2018, 15:16 34
Цитата Сообщение от skypex Посмотреть сообщение
КодБлокс ругается
Во-первых, скорее всего, ругается не Code::Blocks, а компилятор.
Во-вторых, компилятор пишет что и где ему не нравится,
иногда даже пишет что его осчастливит.
1
2 / 2 / 0
Регистрация: 07.12.2017
Сообщений: 29
06.10.2018, 15:22  [ТС] 35
Да возможно и сам компилятор строит такую погоду. Не поможете ли сделать код обычный без std и прочего? Я бы был очень благодарен
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
06.10.2018, 15:27 36
skypex, без std и прочего это сюда - https://www.cyberforum.ru/c-beginners/
1
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
06.10.2018, 15:56 37
skypex, включите поддержку стандарта C++11.
0
Новичок
06.10.2018, 16:32     Указатели и что с ними делать?
  #38

Не по теме:

Цитата Сообщение от skypex Посмотреть сообщение
Не поможете ли сделать код обычный без std и прочего?
Да легко
C++
1
int main() { return 0; }

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2018, 16:32

Висячие указатели, как с ними бороться
Здравствуйте, возникла такая проблема. Есть вектор объектов, в указатель заношу какой либо объект....

подскажите что делать при вводимых данных 10 25 и 5 20 программа работает не правильно должна выводить 135 подскажите что делать
Вывод В выходной файл выведите одно число - сколько ударов сделали часы за этот отрезок времени.

Разместите в памяти последовательно все цифры заданного числа, используя указатели и операции над ними
Задано натуральное число произвольной длины. Разместите в памяти последовательно все его цифры,...

Задано число. Разместите в памяти последовательно все его цифры, используя указатели и операции над ними
Задано натуральное число. Разместите в памяти последовательно все его цифры, используя указатели и...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru