Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410

указатели

10.10.2013, 23:52. Показов 2015. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Я начал изучать указатели и ссылки. Кто какие задания может посоветовать для практики?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.10.2013, 23:52
Ответы с готовыми решениями:

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Почему Лафоре использует указатели на указатели, вместо обмена значениями указателей?
Доброго времени суток! Задался теоретическим вопросом. Читал пример из книги Лафоре ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++,...

29
 Аватар для AnyOne697
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
11.10.2013, 01:36
Реализуйте умные указатели.
Что должно быть. Должен быть шаблонный класс:
C++
1
2
3
4
5
6
7
8
9
10
11
template <class T> class Pointer {
public:
    Pointer < T > ( T& object );
    Pointer < T > ( Pointer < T > & pointer );
    ~Pointer < T > ();
    T& operator -> ();
    Pointer < T > operator = ( Pointer < T > p );
private:
    unsigned m_count;
    T* m_object;
}
То есть, требуется уметь создавать новый умный указатель, уметь его присваивать другому указателю. Также, требуется вести подсчёт количества ссылок и вызвать, когда требуется, деструкторы.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
11.10.2013, 01:51
AnyOne697, ты издеваешься? Какие шаблоны, если указатели не изучены?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
11.10.2013, 01:53
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Pointer < T > operator = ( Pointer < T > p );
эта перегрузка не перекрывает оператор присваивания сгенерированный компилятором
0
 Аватар для AnyOne697
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
11.10.2013, 01:57
Цитата Сообщение от Jupiter Посмотреть сообщение
эта перегрузка не перекрывает оператор присваивания сгенерированный компилятором
А такая?
C++
1
Pointer < T > operator = ( Pointer < T > &p );
Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
AnyOne697, ты издеваешься? Какие шаблоны, если указатели не изучены?
Заодно шаблоны поучим. Хотя их и стоит избегать =)
В общем, в шаблонах нет ничего страшного. Пока дело не дойдёт до огромного проекта с количеством классов больше чем 100 и сложной иерархией между ними. Здесь можно написать и десяток велосипедов вместо использования неудобных классов std::.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
11.10.2013, 02:04
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Заодно шаблоны поучим. Хотя их и стоит избегать =)
В общем, в шаблонах нет ничего страшного. Пока дело не дойдёт до огромного проекта с количеством классов больше чем 100 и сложной иерархией между ними. Здесь можно написать и десяток велосипедов вместо использования неудобных классов std::.
рассуждать о плюсах и минусов шаблонов хорошо в соседней теме. templates, STL
Мне почему-то кажется, что ты данную тему с той перепутал. Там очень жаркие споры шли и ты каким-то образом "по инерции" перенёс сюда спор про шаблоны тоже.
А тут IchimaruGin только начал изучать Си. И бесполезно валить всё в одну кучу: шаблоны, классы, указатели. Изучать эти вещи надо как раз в обратной последовательности.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.10.2013, 02:11
IchimaruGin,
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе. Затем переделать на ссылки.
Создать функции, которые принимают массив и его размер и:
- рандомно заполняют его
- выводят на экран
- перемешивают элементы (для того, чтобы менять два числа местами создать отдельную функцию)
Все проделывать сначала на указателях, потом на ссылках.

Посложнее:
реализовать однонаправленный список (тут надо было бы уже знать, что такое структуры)
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
11.10.2013, 02:20
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Пока дело не дойдёт до огромного проекта с количеством классов больше чем 100 и сложной иерархией между ними. Здесь можно написать и десяток велосипедов вместо использования неудобных классов std::.
ты о чём-то своём начал говорить. Какие-то шаблоны... тема про указатели!
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Кто какие задания может посоветовать для практики?
Вот ИМХО довольносамые и спискам, как предложил Глюк.
- Задать в программе несколько локальных переменных, глобальных, функций, у функций аргументы. Вывести на экран адреса всех этих переменных и функций.
-передача указателей как аргументов в функцию. Отличия от передачи аргументов по значению. Написать функцию обмена значений двух переменных void swap(int* a, int* b)
- Задать переменную и несколько указателей. Сделать, чтобы оба указателя указывали на эту переменную. Изменять значение переменной, обращаясь к ней то напрямую, то через указатель. Убедиться, что переменная изменяется при косвенном обращении к ней.

- Изменять указатель, перенаправляя его на разные переменные. Задать разные значения нескольким переменным, обращаясь к ним через один указатель.
Массивы и указатели.
- пройтись по массиву с помощью указателя и вывести содержимое на экран
-Создать программу "оглавление книги". В массив char book[] заносится текст. Создать оглавление книги в виде массива char* chapters[N]
1
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
11.10.2013, 16:31  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
Просто что бы уточнить:
нужна функция
C++
1
int p1(int* pa,int s)
pa -указатель, который принимает два числа s - сума
или
C++
1
int p1(int* pa,int* pb,int s)
pa -указатель, который принимает первое число pb -указатель, который принимает второе число s - сума
0
 Аватар для AnyOne697
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
11.10.2013, 16:35
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А тут IchimaruGin только начал изучать Си. И бесполезно валить всё в одну кучу: шаблоны, классы, указатели. Изучать эти вещи надо как раз в обратной последовательности.
Комплексное изучение - наиболее эффективное изучение. Сложно, но если есть желание, то эффективность много выше. Это так, моя личная заметка.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Мне почему-то кажется, что ты данную тему с той перепутал. Там очень жаркие споры шли и ты каким-то образом "по инерции" перенёс сюда спор про шаблоны тоже.
Премного извеняюсь. Действительно перескачило.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.10.2013, 16:51
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Просто что бы уточнить:
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
Нужна такая функция:
C++
1
2
3
4
void foo(int *x, int *y)
{
    ...
}
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
11.10.2013, 17:30  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
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
30
31
// Pointer1.cpp
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int a;
int b;
int s;
int* pa;
 
int p1(int* pa)
{
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;
    pa = &a;
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;
    
    s = a + b;
    return s;
}
 
int main()
{
    int c;
    c = p1(pa);
    cout << "Suma =" << c << endl;
    return 0;
}
Добавлено через 41 секунду
шяс перепишу

Добавлено через 32 минуты
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
Вот что получилось
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
30
// Pointer1.cpp
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int a;                                          // Первое число
int b;                                          // Второе число
int c;                                          // Доп. число
int* pa(nullptr);                               // Пустой указатель
int* pb(nullptr);                               // Пустой указатель
 
void p1(int* pa,int* pb)
{
    pa = &a;                                    // Присвоение указателю pa адрес а
    pb = &b;                                    // Присвоение указателю pb адрес b
    cout << " Suma = " << (*pa + *pb) << endl;  // Подсчет и вывод сумы чисел
}
 
int main()
{
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;                                   // Ввод первого числа
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;                                   // Ввод второго числа
    p1(pa, pb);
    cin >> c;                                   // Задержка экрана
    return 0;
}
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
11.10.2013, 17:36
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Вот что получилось
ну и как применить эту функцию к другим числам? не к а и b, а к c d например
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
11.10.2013, 17:39  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
ну и как применить эту функцию к другим числам? не к а и b, а к c d например
а зачем?

Добавлено через 1 минуту
задача стояла что бы два числа функция читала!(вроде как)
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
11.10.2013, 17:40
Цитата Сообщение от IchimaruGin Посмотреть сообщение
а зачем?
а для чего параметры у функции p1 ?

Цитата Сообщение от IchimaruGin Посмотреть сообщение
задача стояла что бы два числа функция читала!(вроде как)
иди ещё раз почитай для чего нужны функции, как бы грубо это не звучало но в духе "а зачем?"
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
11.10.2013, 17:43  [ТС]
что бы функция работала)

Добавлено через 1 минуту
ок еще подучу
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
11.10.2013, 17:44
Цитата Сообщение от IchimaruGin Посмотреть сообщение
что бы функция работала)
зачем? чтобы получить тот же результат можно было все и в main-е написать
0
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
11.10.2013, 18:14  [ТС]
Цитата Сообщение от Jupiter Посмотреть сообщение
ну и как применить эту функцию к другим числам? не к а и b, а к c d например
вообщето a,b и c,d это переменные а функцию можно и так использовать с другими числами...
если я не правильно понял обьясни в чем я не прав.

Добавлено через 2 минуты
не могу просто понять как можна сохранять эти данные в других переменных зарание неизвестных

Добавлено через 2 минуты
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
30
// Pointer1.cpp
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
int a;                                          // Первое число
int b;                                          // Второе число
int c;                                          // Доп. число
int* pa(nullptr);                               // Пустой указатель
int* pb(nullptr);                               // Пустой указатель
 
void p1(int* pa,int* pb)
{
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;                                   // Ввод первого числа
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;                                   // Ввод второго числа
    pa = &a;
    pb = &b;
    cout << " Suma = " << (*pa + *pb) << endl;  // Подсчет и вывод сумы чисел
}
 
int main()
{
    p1(pa, pb);
    cin >> c;                                   // Задержка экрана
    return 0;
}
если что я такой вариант написал
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
11.10.2013, 18:18
Цитата Сообщение от IchimaruGin Посмотреть сообщение
вообщето a,b и c,d это переменные а функцию можно и так использовать с другими числами...
ок да, тут я неточно выразился, но суть от этого не меняется, a,b жестко захардкожены внутри функции в которую ещё и передаются указатели, но используются они не поназначению.
читаем условие ещё раз
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
1. у нас есть два числа
2. мы вызываем функцию, и передаем в эту функция эти два числа
3. после вызова функции мы ожидаем что первое число будет содержать сумму обоих чисел.
-про вывод результата внутри функции ничего в задании не сказано.
-про привязку к переменным а b тоже ничего не сказано.
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
#include <iostream>
 
using std::cin;
using std::cout;
using std::endl;
 
void p1(int* pa, int* pb)
{
    *pa += *pb;
}
 
int main()
{
    int a, b;
    cout << "Vvedite 1 chislo: " << endl;
    cin >> a;                                   
    cout << "Vvedite 2 chislo: " << endl;
    cin >> b;                                  
    
    p1(&a, &b);
    cout << a;
 
    cin >> a;                                   
    return 0;
}
1
82 / 82 / 44
Регистрация: 14.07.2013
Сообщений: 410
11.10.2013, 18:23  [ТС]
значит я не так понял задание...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.10.2013, 18:23
Помогаю со студенческими работами здесь

Используя нетипизированные указатели и указатели на подпрограммы обобщить сортировку пузырьком
Смысл задания в том, что нужно отсортировать массив структур из 3х полей по сумме координат есть структура struct XYZ{ ...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной
Мой код. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; void min_max(int*pa, int*pb,...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов?
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...

Указатели на указатели, как правильно разыменовать, где ошибка?
1)Есть класс: Shape - абстрактный; у него есть классы наследники: Circle, Triangle. 2)Eсть контейнер: vector &lt;Shape*&gt; Scontainer;...

Указатели на указатели: для чего они могут понадобятся?
Изучаю C++, дошёл до указателей на указатели. Там пишут что эта тема не обязательна. Для чего они могут понадобятся?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru