Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
5 / 3 / 3
Регистрация: 02.08.2016
Сообщений: 39

Указатель: всегда ли использование указателей хорошо?

09.08.2016, 14:08. Показов 1353. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня своего рода вопрос: всегда ли использование указателей хорошо, например каждый адрес переменной засовывать в указатель, а после работать с ними.
Вот пример с указателями:
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
#include <iostream>
using namespace std;
 
int sum(int *a, int *b);
 
int main()
{
    setlocale(LC_ALL, "Rus");
    int d, b;
    int *A, *B;
    A = &d, B = &b;
    cin >> *A >> *B;
    int a;
    int *c;
    c = &a;
    *c = sum(A, B);
    cout << *c;
    return 0;
}
 
int sum(int *a, int *b)
{
    return *b + *a;
}
А вот без:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
int sum(int a, int b);
 
int main()
{
    setlocale(LC_ALL, "Rus");
    int a, b;
    cin >> a >> b;
    int c = sum(a, b);
    cout << c;
    
}
 
int sum(int a, int b)
{
    return a + b;
}
Какой из данных кодов лучше: с указателями или без?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.08.2016, 14:08
Ответы с готовыми решениями:

Как обойтись без указателей и указателей на указатель?
Ибо не совсем выходит понять,что на что тут указывает #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using...

Указатель типа void. Использование косвенного связывания через универсальный указатель
Необходимо использовать косвенного связывания через универсальный указатель, примерный вид: struct обобщение{ключ; void* на что угодно}...

Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя.
Помогите пожалуйста!!!!!!! Сделать три варианта: первый вариант – передача данных между функциями с помощью глобального...

27
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
09.08.2016, 14:13
Цитата Сообщение от ELVY Посмотреть сообщение
Какой из данных кодов лучше: с указателями или без?
в данном случае - без, так как дополнителные операции бессмысленны. Указатели необходимы в основном когда работаешь с динамическими типами данных.
0
5 / 3 / 3
Регистрация: 02.08.2016
Сообщений: 39
09.08.2016, 14:19  [ТС]
CoderHuligan, Ну, вот код, который с указателями он будет лучше ( быстрее выполняться ) или нет?
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
09.08.2016, 14:22
Цитата Сообщение от ELVY Посмотреть сообщение
или нет
Данный код с указателями будет медленнее. Не нужно их пихать там где не нужно, чтобы только показаться умным. Нужно по умному их применять там где они необходимы.
0
5 / 3 / 3
Регистрация: 02.08.2016
Сообщений: 39
09.08.2016, 14:36  [ТС]
CoderHuligan, Спасибо, просто только начинаю вникать. В книгах сразу не пишут куда их пихать.
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
09.08.2016, 14:40
Цитата Сообщение от ELVY Посмотреть сообщение
В книгах сразу не пишут куда их пихать.
В большинстве книг вообще не пишут как программировать...
0
5 / 3 / 3
Регистрация: 02.08.2016
Сообщений: 39
09.08.2016, 15:32  [ТС]
up. Еще хочу послушать советы.
0
 Аватар для spymonk
3 / 3 / 0
Регистрация: 08.06.2016
Сообщений: 39
09.08.2016, 15:32
Программирование постигается методом проб и ошибок и преениманием у других их опыта. Если бы книги писали на такой основе, то были бы многотомники)
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
09.08.2016, 15:44
Цитата Сообщение от ELVY Посмотреть сообщение
Еще хочу послушать советы.
Сначала ответьте на вопрос.
Зачем Вы вообще в тот код добавили указатели?
0
5 / 3 / 3
Регистрация: 02.08.2016
Сообщений: 39
09.08.2016, 15:52  [ТС]
HelicopterK52, Я читаю книгу по программированию и началась тема указателей. В теме было сказано, что указатели ускоряют код программы в несколько раз. Вот я решил выяснить всегда ли они помогают.
1
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
09.08.2016, 15:57
Это на тему о том, с чего надо начинать обучение... Конечно с Ассемблера и машинных кишок!.. Иначе: будет катастрофа...
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
09.08.2016, 15:58
Цитата Сообщение от ELVY Посмотреть сообщение
В теме было сказано, что указатели ускоряют код программы в несколько раз
Что за книга? Возможно, имелась ввиду передача указателей на большие объекты в функции.
0
5 / 3 / 3
Регистрация: 02.08.2016
Сообщений: 39
10.08.2016, 11:34  [ТС]
Сегодня сидел, разбирал разные примеры и выдумал вот такой код с использованием указателей. В прошлой моей теме мне сказали, что указатели нужно использовать в основном при объявлении статических переменных. Так вот, является ли этот код более качественным (быстрым)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
void sum(int *a, int *b);
 
int main()
{
    setlocale(LC_ALL, "Rus");
    int a, b;
    cout << "Введите значение переменной a и b\n";
    cin >> a >> b;
    sum(&a, &b);
    return 0;
}
 
void sum(int *a, int *b)
{
    cout << *a + *b << endl;
}
чем этот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using namespace std;
 
void sum(int a, int b);
 
int main()
{
    setlocale(LC_ALL, "Rus");
    int a, b;
    cout << "Введите значение переменной a и b\n";
    cin >> a >> b;
    sum(a, b);
    return 0;
}
 
void sum(int a, int b)
{
    cout << a + b << endl;
}
0
 Аватар для Toshkarik
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
10.08.2016, 11:44
Нет, не является.
Цитата Сообщение от ELVY Посмотреть сообщение
указатели нужно использовать в основном при объявлении статических переменных
Это еще почему?
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
10.08.2016, 12:02
Цитата Сообщение от ELVY Посмотреть сообщение
использовать в основном при объявлении статических переменных
Чего? Где? Кто? Когда? Бредятина какая-то.
Цитата Сообщение от ELVY Посмотреть сообщение
Так вот, является ли этот код более качественным
Он является более сложным, менее читаемым, более подверженным ошибкам и вообще глупым.

Цитата Сообщение от ELVY Посмотреть сообщение
быстрым
Ну вот напротив Вашего дома находится магазин. Быстрее будет выйти из дома и дойти до него или сначала открыть карту, посмотреть где этот магазин и потом пойти?
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
10.08.2016, 12:04
ELVY, вы неправильно понимаете их предназначения вы пытаетесь сделать неудачный пример, ну зачем вам лишние переменные когда можно обойтись без них, я про указатели, но допустим есть вот такая структура
C++
1
2
3
4
struct superStruct{
    int superArray[10000][100000][100000];
    char name[1000000];
};
и какая нибудь функция которая что то с ней делает, так вот передача указателя или адресса в эту функцию вместо объекта будет работать быстрее потому что не будет создаватся копия такого большого объекта, это вам один пример, не на стандартных типах, теперь зачем могут использоватся указатели, допустим у вас есть метод который должен менять значение переменных
C++
1
2
3
4
5
6
7
void someFunc(int *arg1, int* arg2, int* arg3) {
    *arg1 = *arg2 = *arg3 = 1000;
}
void callFunc() {
    int a = 0, b = 0, c = 0;
    someFunc(a,b,c);
}
вот тут указатели используются чтобы изменить переменную из другой области видимости потому что если мы передадим просто переменную то создастя копия это пара элементарных примеров
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
10.08.2016, 12:05
Зачем дублировать темы? Указатель: всегда ли использование указателей хорошо? В правила форума загляни
0
68 / 68 / 11
Регистрация: 28.12.2012
Сообщений: 471
10.08.2016, 12:18
Цитата Сообщение от HelicopterK52 Посмотреть сообщение
Что за книга? Возможно, имелась ввиду передача указателей на большие объекты в функции.
Шилдт отмечал, что применение указателя на строку является более быстрой операцией чем массив строк.
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
10.08.2016, 12:20
Цитата Сообщение от SEGNET Посмотреть сообщение
что применение указателя на строку является более быстрой операцией чем массив строк
Возникла ошибка при разборе строки. Мозг сломался и будет перезагружен.
1
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
10.08.2016, 12:25
SEGNET, ну про это HelicopterK52, и говорит, если у вас строка в 50 символов это 50 байт как минимум а ее адресс занимает 4 байта или 8 в зависимости от разрядности системы

Добавлено через 1 минуту
HelicopterK52, я думаю это имеллось ввиду
C++
1
2
3
4
5
6
void good(const std::string& str) {
//...
}
void bad(const std::string str) {
//...
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.08.2016, 12:25
Помогаю со студенческими работами здесь

Использование функций, возвращающих указатель на указатель
Здравствуйте. Есть несколько функций, которые возвращают указатель на указатель. Вот одна из них: long ZGetBufferADC(long...

Указатель на массив указателей
Доброго времени суток. Имеется класс Kino, содержащий в себе некоторые поля данных и методы к ним. Другой же класс, класс KinoMassiv,...

указатель на массив указателей
помогите разобраться, передаю в функцию update_table массив указателей на фигуры, для каждой из которых должна вызываться add_to_table....

Массив указателей на указатель
Помогите, пожалуйста. У нас есть объявление int **m6; Нужно представить и нарисовать, как данный массив 10 указателей на указатель,...

Арифметика указателей (указатель на void*)
У меня есть указатель на void*, который я получил с помощью void *beginPointer = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);Мне...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru