Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.51/88: Рейтинг темы: голосов - 88, средняя оценка - 4.51
4 / 4 / 0
Регистрация: 04.07.2013
Сообщений: 27

Ссылки и указатели: зачем все это?

21.04.2017, 19:09. Показов 17837. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане. Кому не лень, могли бы мне доступно объяснить, для чего в С++ все так усложнять? Я про указатели, ссылки, взятие по адресу, разыменование, ссылка на ссылку, ссылка на константный указатель, указатель на указатель через указатель по ссылке... и тд.
Я выучил ужасный синтаксис всего этого, и могу использовать, но я не пойму на кой это все надо. Почему просто не обращаться к переменной? Ладно, под ссыль не выделяется память, но под указатель выделяется. Для чего плодить все эти сущности, постоянно выделяя память, по сути одному и тому же значению? Может есть какой нить пример, который докажет мне что без всего этого не обойтись? Или это просто философия языка?
Искренне хотелось бы понять...
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2017, 19:09
Ответы с готовыми решениями:

Зачем нужны все эти указатели (или не указатели)
Зачем надо DWORD, HANDLE, LPVOID?

сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь усложнять?
сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь...

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить?
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

21
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
23.04.2017, 12:54
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Qazz Посмотреть сообщение
Ладно, под ссыль не выделяется память, но под указатель выделяется. Для чего плодить все эти сущности, постоянно выделяя память, по сути одному и тому же значению?
Попробуйте построить граф не используя ссылки и указатели. Например, генеалогическое древо.
0
 Аватар для ПерС
587 / 490 / 371
Регистрация: 05.11.2013
Сообщений: 1,272
Записей в блоге: 6
23.04.2017, 17:53
т.е. передача в функцию указателя на переменную, быстрее выведет значение на консоль, чем передача переменной в эту же фу-ию..?
уже подчеркивали, что в программе речь обычно идёт о массиве или структуре, а не об отдельной переменной.
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
#include <iostream>
#include <ctime>
using namespace std;
 
struct chtoto {
 char name[20];
 double x,y,z;
};
 
void f1(chtoto a) {
    static bool p=false;
    if (!p) { cout << endl << sizeof(a) << "byte(s)"; p=true; }
}
 
void f2(chtoto *a) {
    static bool p=false;
    if (!p) { cout << endl << sizeof(a) << "byte(s)"; p=true; }
}
 
int main(void) {
 const int size=1000000000;
 chtoto a={"Hello",1.,2.,3.};
 long t1=time(0);
 for (int i=0; i<size; i++) f1(a);
 cout << endl << (time(0)-t1) << "s";
 t1=time(0);
 for (int i=0; i<size; i++) f2(&a);
 cout << endl << (time(0)-t1) << "s";
 system("pause >nul");
 return 0;
}
функция f1 получит через стек больше данных (=размеру структуры в байтах), чем f2 (=размеру указателя)
а по быстродействию будет примерно одно и то же, во всяком случае, в Release-сборке. В Debug, конечно, заметно отстанет f1:
Code
1
2
3
4
48byte(s)
60s
4byte(s)
37s
Ну и если просто взять структурку пробольше и собрать в Release что-то типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
struct chtoto {
 char name[20000];
 double x,y,z;
};
 
void f1(chtoto a) {
 static bool p=false;
 if (!p) { cout << endl << sizeof(a) << "byte(s)"; p=true; }
}
 
int main(void) {
 const int size=1000000000;
 chtoto a={"Hello",1.,2.,3.};
 f1(a);
 system("pause >nul");
 return 0;
}
исполняемый файл получится больше размером, чем
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
struct chtoto {
 char name[20000];
 double x,y,z;
};
 
void f1(chtoto *a) {
 static bool p=false;
 if (!p) { cout << endl << sizeof(a) << "byte(s)"; p=true; }
}
 
int main(void) {
 const int size=1000000000;
 chtoto a={"Hello",1.,2.,3.};
 f1(&a);
 system("pause >nul");
 return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.04.2017, 17:53

Указатели и ссылки. Надо ли обнулять? когда и как это делать?
насчет ссылок вроде все ясно. обнулять их нет смысла на сколько я понимаю. А вот насчет указателей не все так просто. В книгах часто,...

Указатели на слонов или А зачем нужны указатели?
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...

Зачем нужны контейнеры stack, queue, list, если это всё можно заменить вектором?
В чём их преимущество? Оптимизация?

Зачем нужны rvalue ссылки, если есть универсальные ссылки
Читаю книгу Скотта Мэйерса... Что-то я совсем запутался с этими rvalue ссылками. Я не пойму, зачем нужны rvalue ссылки, если есть...

Зачем нужно освобождать память динамических объектов в деструкторе, если всё равно это сделает менеджер памяти
Не скажу за все ОС-и, но под Windows есть менеджер памяти. Когда по ходу кода встречается new, ну или что - то другое для алокации...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Сукцессия 20. Война автоботов. Делаем ставки
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru