Другие языки программирования и технологии

Чем указатели лучше переменных?

Я тут подумал, что всегда можно использовать вместо переменных указатели (ну, не считая строк) , так зачем нужны указатели?
Андрей Ка
Андрей Ка
3
Указатели - тоже тип переменных. Но идея понятна. Не лучше, не хуже. Хороши на своем месте. Программы часто работают с косвенной адресацией данных, но не всегда. Можно замести это под ковер, можно держать на виду. С предпочитает держать на виду, чтобы программисту была прозрачнее реализация запрограммированных действий.
.3
...saнёk... 37_Rus
74 043
Лучший ответ
когда мы пишем:
int i;
i = 10;

реально идет запись в регистр (32 бита или 64) числа 10, что намного быстрее чем из памяти брать;
Особенно если написать:

register int i; // кажись так, не помню си или с++ это

Таким образом использование переменных в си ускоряло код, особенно в те времена когда каждую команду экономили.

Регистров ограниченное кол-во, так что если много переменных, то их все же так и придется хранить в памяти и оттуда извлекать по необходимости. Хоть стек и расположен будет в кеше проца для быстродействия, но все равно регистр по любому быстрее работает.

Указатель тоже занимает место в памяти, так что если все переменные брать через указатель, то инструкция процессора более долго выполняемая, все же быстрее использовать массивы, так как указатель уже храниться в отдельном регистре и команда увеличения на 1 (i++) намного быстрее любого присваивания.

В случае использования больших объектов в памяти можно использовать только указатели (ссылки в си++ тож можно, что удобней) , но даже и тогда переменные циклов и тп используют регистры процессора.

А так действительно надо вам почитать про указатели, а еще лучше изучить ассемблер, чтоб понимать зачем изобретали язык си. В других языках еще интересней с указателями.. .
Указатели - это другой способ работы с данными. Помимо ускорения передачи информации между функциями важно использование указателей при работе с массивами и прочими структурами, так как поддерживается косвенная адресация, непосредственно реализованная в командах всех современных процессоров. Учи ассемблер и команды процессора, все станет ясно.
Указатель это тоже переменная, вообще-то. Так что ваш вопрос звучит примерно так: чем колбаса лучше еды.
У указателе хранится адрес вашей переменной.
Если нет переменной, то нет смысла в указателе (на что он будет указывать?) .
Но без указателя нет смысла в переменной, потому что не зная ее адреса, не сможем с ней работать.

Так что учи мат. часть!

>>Указатели всегда занимают 2 байта

Купцов Дмитрий, Вы что со времен динозавров? Или учились программировать на допотопных компах, 40 летней давности?
2 байта они занимают в том случае, если адресация памяти не больше 64 КБ.

В современных компах, указатели занимают 4 байта для 32 битных систем и 8 байт для 64 битных систем.
A.
Aндrюха ...
31 824
Как ни странно - указатели должны указывать на что-то :-)
Например, чтобы не копировать блок данных метров на 300 в ОП лишний раз. Проще взять указатель на начало блока и его длину.
Павел Балашов
Павел Балашов
7 069
Переменные хранят значения, а указатели только адреса памяти. Указатели всегда занимают 2 байта, например, double туда уже не запихнуть. Наверное как-то так…
Сайлау ***
Сайлау ***
620