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

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

Войти
Регистрация
Восстановить пароль
 
 
IchimaruGin
61 / 61 / 24
Регистрация: 14.07.2013
Сообщений: 289
Завершенные тесты: 1
#1

указатели - C++

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

Доброго времени суток.
Я начал изучать указатели и ссылки. Кто какие задания может посоветовать для практики?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2013, 23:52     указатели
Посмотрите здесь:

Указатели - C++
Помогите. Код рабочей программы через простое обращение к массиву. нужно чтоб обращение было через адресацию с использованием (& *)...

Указатели - C++
Нужно очень срочно. 1. Дано целое n>2. Напечатать все простые числа из диапазона ; 2. Заданы 3 натуральных числа а,b,c которые...

Указатели - C++
Помогите плиз! Введите с клавиатуры данные в массив целого типа, а затем перепишите их значения в другой массив удвоенной размерности...

Указатели - C++
Наткнулся на вот такой цикл for (char p=str; *p!=(char)0; ++p) ,поясните пожалуйста что значит *p!=(char)0

Указатели - C++
1.Заданы три натуральных числа А, В, С, которые обозначают число, месяц и год. Найти порядковый номер даты, начиная отсчет с начала года. ...

Указатели в С++ - C++
Здравствуйте...требуется помощь по следующей задаче... Задача: Создать функцию, которая возвращает количество элементов массива меньше...

Указатели - C++
int k=5; int *ukaz; ukaz=&k; *ukaz=17; printf("%o\n",ukaz); printf("%o\n",k); system("pause"); Может, что то я делаю не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
11.10.2013, 01:36     указатели #2
Реализуйте умные указатели.
Что должно быть. Должен быть шаблонный класс:
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;
}
То есть, требуется уметь создавать новый умный указатель, уметь его присваивать другому указателю. Также, требуется вести подсчёт количества ссылок и вызвать, когда требуется, деструкторы.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
11.10.2013, 01:51     указатели #3
AnyOne697, ты издеваешься? Какие шаблоны, если указатели не изучены?
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 01:53     указатели #4
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Pointer < T > operator = ( Pointer < T > p );
эта перегрузка не перекрывает оператор присваивания сгенерированный компилятором
AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 533
11.10.2013, 01:57     указатели #5
Цитата Сообщение от Jupiter Посмотреть сообщение
эта перегрузка не перекрывает оператор присваивания сгенерированный компилятором
А такая?
C++
1
Pointer < T > operator = ( Pointer < T > &p );
Добавлено через 1 минуту
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
AnyOne697, ты издеваешься? Какие шаблоны, если указатели не изучены?
Заодно шаблоны поучим. Хотя их и стоит избегать =)
В общем, в шаблонах нет ничего страшного. Пока дело не дойдёт до огромного проекта с количеством классов больше чем 100 и сложной иерархией между ними. Здесь можно написать и десяток велосипедов вместо использования неудобных классов std::.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
11.10.2013, 02:04     указатели #6
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Заодно шаблоны поучим. Хотя их и стоит избегать =)
В общем, в шаблонах нет ничего страшного. Пока дело не дойдёт до огромного проекта с количеством классов больше чем 100 и сложной иерархией между ними. Здесь можно написать и десяток велосипедов вместо использования неудобных классов std::.
рассуждать о плюсах и минусов шаблонов хорошо в соседней теме. templates, STL
Мне почему-то кажется, что ты данную тему с той перепутал. Там очень жаркие споры шли и ты каким-то образом "по инерции" перенёс сюда спор про шаблоны тоже.
А тут IchimaruGin только начал изучать Си. И бесполезно валить всё в одну кучу: шаблоны, классы, указатели. Изучать эти вещи надо как раз в обратной последовательности.
MrGluck
Модератор
Эксперт CЭксперт С++
6971 / 4142 / 588
Регистрация: 29.11.2010
Сообщений: 10,990
11.10.2013, 02:11     указатели #7
IchimaruGin,
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе. Затем переделать на ссылки.
Создать функции, которые принимают массив и его размер и:
- рандомно заполняют его
- выводят на экран
- перемешивают элементы (для того, чтобы менять два числа местами создать отдельную функцию)
Все проделывать сначала на указателях, потом на ссылках.

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

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

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Мне почему-то кажется, что ты данную тему с той перепутал. Там очень жаркие споры шли и ты каким-то образом "по инерции" перенёс сюда спор про шаблоны тоже.
Премного извеняюсь. Действительно перескачило.
MrGluck
Модератор
Эксперт CЭксперт С++
6971 / 4142 / 588
Регистрация: 29.11.2010
Сообщений: 10,990
11.10.2013, 16:51     указатели #11
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Просто что бы уточнить:
Цитата Сообщение от MrGluck Посмотреть сообщение
Создать функцию, которая принимает два числа по указателю и к первому добавляет второе.
Нужна такая функция:
C++
1
2
3
4
void foo(int *x, int *y)
{
    ...
}
IchimaruGin
61 / 61 / 24
Регистрация: 14.07.2013
Сообщений: 289
Завершенные тесты: 1
11.10.2013, 17:30  [ТС]     указатели #12
Цитата Сообщение от 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;
}
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 17:36     указатели #13
Цитата Сообщение от IchimaruGin Посмотреть сообщение
Вот что получилось
ну и как применить эту функцию к другим числам? не к а и b, а к c d например
IchimaruGin
61 / 61 / 24
Регистрация: 14.07.2013
Сообщений: 289
Завершенные тесты: 1
11.10.2013, 17:39  [ТС]     указатели #14
Цитата Сообщение от Jupiter Посмотреть сообщение
ну и как применить эту функцию к другим числам? не к а и b, а к c d например
а зачем?

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

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

Добавлено через 1 минуту
ок еще подучу
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 17:44     указатели #17
Цитата Сообщение от IchimaruGin Посмотреть сообщение
что бы функция работала)
зачем? чтобы получить тот же результат можно было все и в main-е написать
IchimaruGin
61 / 61 / 24
Регистрация: 14.07.2013
Сообщений: 289
Завершенные тесты: 1
11.10.2013, 18:14  [ТС]     указатели #18
Цитата Сообщение от 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;
}
если что я такой вариант написал
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.10.2013, 18:18     указатели #19
Цитата Сообщение от 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2013, 18:23     указатели
Еще ссылки по теме:

Указатели!! - C++
Пользователь вводит строку с клавиатуры - предложение с пробелами и знаками пунктуации длиной до 100 символов. Вывести на экран все знаки...

Указатели С - C++
Объясните пожалуйста как получается что запись типа *(1+data) эквивалентна записи 1. Как из data получается *(1+data) и *(data+1)...

указатели - C++
Вот собственно код, проблема в том что я непойму как он работает, что именно непонятно указал в комментариях unsigned char **...

Указатели - C++
например мы имеем данный кусок кода char str=&quot;eto prostoi test&quot;; char *start; start=str; cout&lt;&lt;start; *start='b'; ...

указатели - C++
Здравствуйте! Ребят , вы не могли бы объяснить некоторые нюансы ,связанные с указателями, недалекому человеку? допустим: int N; ...


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

Или воспользуйтесь поиском по форуму:
IchimaruGin
61 / 61 / 24
Регистрация: 14.07.2013
Сообщений: 289
Завершенные тесты: 1
11.10.2013, 18:23  [ТС]     указатели #20
значит я не так понял задание...
Yandex
Объявления
11.10.2013, 18:23     указатели
Ответ Создать тему
Опции темы

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