2 / 2 / 0
Регистрация: 09.03.2013
Сообщений: 40
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Зачем нужны указатели?25.11.2013, 10:43. Показов 2798. Ответов 17
Метки нет (Все метки)
Интересует вопрос, зачем нужны указатели?
Например почему лучше нужно объявлять переменные как указатели, почему как обычно нельзя? То есть не так:
Не так
Также сейчас читаю про указатель this. Зачем он тоже нужен, не пойму.
0
|
25.11.2013, 10:43 | |
Ответы с готовыми решениями:
17
Зачем нужны все эти указатели (или не указатели) Указатели на слонов или А зачем нужны указатели? Зачем нужны указатели Зачем здесь нужны указатели |
840 / 498 / 325
Регистрация: 29.12.2009
Сообщений: 1,106
|
|
25.11.2013, 10:52 | 2 |
Понимание для чего вообще нужны указатели?
Объясните, пожалуйста, зачем в C++ нужны указатели Не могу понять зачем нужны указатели? Для чего нужны указатели на функции?
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
25.11.2013, 10:56 | 3 |
В первом случае переменная создаётся в динамической памяти, во втором - на стеке (автоматический класс памяти). Разницу, между этими классами памяти, надеюсь, понимаете.
Хотя бы для того, чтобы иметь доступ к переменной, созданной в динамической памяти.
0
|
Неэпический
|
|
25.11.2013, 11:00 | 4 |
чтобы знать где лежит что-то.
адрес объекта, ведь нужно как-то понимать, данные какого объекта читать/изменять Указатели Расскажите популярно про ссылки и указатели Всё можно! А как именно делать зависит от конкретной задачи.
0
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
|
|
25.11.2013, 11:46 | 5 |
Указатели довольно сложная тема для "переваривания".
Попробую объяснить один из случаев. (Хотя я про себя еще не могу сказать, что разобрался с указателями до конца) Представим такой случай. Вы из функции main вызываете функцию int temp (int i) которая, скажем, будет увеличивать переданную переменную на 1. При вызове функции temp в памяти будет создана копия переданной переменной i, с этой копией будут произведены какие то действия (в моем примере увеличится на 1), модифицированное значение будет возвращено и присвоено какой то переменной. Если же вы передаете в функцию адрес переменной, которую хотите модифицировать то копия не создается, действия модификации внутри функции производятся над самой переменной, возвращать ее нет необходимости. Для большого кол-ва данных и большого объёма профит очевиден. Если я в чем то не прав, надеюсь более опытные участники меня поправят. Буду очень признателен за дополнения.
0
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
|
|
25.11.2013, 12:01 | 7 |
угу, согласен, не подумал об этом. Но ведь, если я правильно понимаю размер указателя зависит от архитектуры, и скажем на 32-битной ОС он будет занимать всего 4 байта, даже если указывает на какую нибудь "тяжелую" структуру?
0
|
141 / 84 / 24
Регистрация: 21.10.2009
Сообщений: 429
|
||||||
25.11.2013, 12:13 | 8 | |||||
0
|
2 / 2 / 0
Регистрация: 09.03.2013
Сообщений: 40
|
||||||
25.11.2013, 12:15 [ТС] | 9 | |||||
Вот пример:
Добавлено через 1 минуту Аа, то есть this получается означает примерно такое: этот par_1 = par_1 из MyClass; этот par_2 = par_2 из MyClass; ? В вашем примере this стоит у переменной конструктора или это переменная класса?
0
|
|
25.11.2013, 12:18
#10
|
0
|
141 / 84 / 24
Регистрация: 21.10.2009
Сообщений: 429
|
|
25.11.2013, 12:19 | 11 |
Проще говоря this это местоимение класса, таким образом получается, что this стоит перед переменной класса.
0
|
141 / 84 / 24
Регистрация: 21.10.2009
Сообщений: 429
|
|
25.11.2013, 12:22 | 13 |
0
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,926
|
||||||
25.11.2013, 12:25 | 14 | |||||
Конкретно на этом примере профит в избавлении от 2х действий.
Если переписать без использования указателей:
0
|
Croessmah
|
25.11.2013, 12:25
#15
|
1
|
25.11.2013, 12:26 | 16 |
Sabnik, а что по-твоему вообще такое func(*a) ?
По-твоему звёздочку можно просто от балды писать там, где есть что-о похожее на указаель? И вообще, даже при работе с указателями звёздочка играет разную роль. int *a; звёздочка просто часть типа объявляемой переменной, тип у переменной int* *a='1'; звёздочка это оператор разадресации, возвращающий те данные(ту переменную), на которые указывает указатель! char a это вообще не указатель! Это локальная переменая из другой функции! (Надеюсь, в областях видимости ты так же не путаешься?)
0
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
||||||
25.11.2013, 16:19 | 17 | |||||
Sabnik, Иногда можно запутаться, если использовать одно имя для разных объектов. Параметр функции func() и переменная в функции main() - это не одно и то же. Обозначим их разными буквами - см.пример.
0
|
2 / 2 / 0
Регистрация: 09.03.2013
Сообщений: 40
|
|
26.11.2013, 18:48 [ТС] | 18 |
0
|
26.11.2013, 18:48 | |
26.11.2013, 18:48 | |
Помогаю со студенческими работами здесь
18
Зачем нужны многоуровневые указатели Не могу понять зачем нужны указатели? Объясните, пожалуйста, зачем в C++ нужны указатели Тема указатели, зачем они нужны Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |