Другие языки программирования и технологии
Чем указатели лучше переменных?
Я тут подумал, что всегда можно использовать вместо переменных указатели (ну, не считая строк) , так зачем нужны указатели?
Указатели - тоже тип переменных. Но идея понятна. Не лучше, не хуже. Хороши на своем месте. Программы часто работают с косвенной адресацией данных, но не всегда. Можно замести это под ковер, можно держать на виду. С предпочитает держать на виду, чтобы программисту была прозрачнее реализация запрограммированных действий.
когда мы пишем:
int i;
i = 10;
реально идет запись в регистр (32 бита или 64) числа 10, что намного быстрее чем из памяти брать;
Особенно если написать:
register int i; // кажись так, не помню си или с++ это
Таким образом использование переменных в си ускоряло код, особенно в те времена когда каждую команду экономили.
Регистров ограниченное кол-во, так что если много переменных, то их все же так и придется хранить в памяти и оттуда извлекать по необходимости. Хоть стек и расположен будет в кеше проца для быстродействия, но все равно регистр по любому быстрее работает.
Указатель тоже занимает место в памяти, так что если все переменные брать через указатель, то инструкция процессора более долго выполняемая, все же быстрее использовать массивы, так как указатель уже храниться в отдельном регистре и команда увеличения на 1 (i++) намного быстрее любого присваивания.
В случае использования больших объектов в памяти можно использовать только указатели (ссылки в си++ тож можно, что удобней) , но даже и тогда переменные циклов и тп используют регистры процессора.
А так действительно надо вам почитать про указатели, а еще лучше изучить ассемблер, чтоб понимать зачем изобретали язык си. В других языках еще интересней с указателями.. .
int i;
i = 10;
реально идет запись в регистр (32 бита или 64) числа 10, что намного быстрее чем из памяти брать;
Особенно если написать:
register int i; // кажись так, не помню си или с++ это
Таким образом использование переменных в си ускоряло код, особенно в те времена когда каждую команду экономили.
Регистров ограниченное кол-во, так что если много переменных, то их все же так и придется хранить в памяти и оттуда извлекать по необходимости. Хоть стек и расположен будет в кеше проца для быстродействия, но все равно регистр по любому быстрее работает.
Указатель тоже занимает место в памяти, так что если все переменные брать через указатель, то инструкция процессора более долго выполняемая, все же быстрее использовать массивы, так как указатель уже храниться в отдельном регистре и команда увеличения на 1 (i++) намного быстрее любого присваивания.
В случае использования больших объектов в памяти можно использовать только указатели (ссылки в си++ тож можно, что удобней) , но даже и тогда переменные циклов и тп используют регистры процессора.
А так действительно надо вам почитать про указатели, а еще лучше изучить ассемблер, чтоб понимать зачем изобретали язык си. В других языках еще интересней с указателями.. .
Указатели - это другой способ работы с данными. Помимо ускорения передачи информации между функциями важно использование указателей при работе с массивами и прочими структурами, так как поддерживается косвенная адресация, непосредственно реализованная в командах всех современных процессоров. Учи ассемблер и команды процессора, все станет ясно.
Указатель это тоже переменная, вообще-то. Так что ваш вопрос звучит примерно так: чем колбаса лучше еды.
У указателе хранится адрес вашей переменной.
Если нет переменной, то нет смысла в указателе (на что он будет указывать?) .
Но без указателя нет смысла в переменной, потому что не зная ее адреса, не сможем с ней работать.
Так что учи мат. часть!
>>Указатели всегда занимают 2 байта
Купцов Дмитрий, Вы что со времен динозавров? Или учились программировать на допотопных компах, 40 летней давности?
2 байта они занимают в том случае, если адресация памяти не больше 64 КБ.
В современных компах, указатели занимают 4 байта для 32 битных систем и 8 байт для 64 битных систем.
Если нет переменной, то нет смысла в указателе (на что он будет указывать?) .
Но без указателя нет смысла в переменной, потому что не зная ее адреса, не сможем с ней работать.
Так что учи мат. часть!
>>Указатели всегда занимают 2 байта
Купцов Дмитрий, Вы что со времен динозавров? Или учились программировать на допотопных компах, 40 летней давности?
2 байта они занимают в том случае, если адресация памяти не больше 64 КБ.
В современных компах, указатели занимают 4 байта для 32 битных систем и 8 байт для 64 битных систем.
Как ни странно - указатели должны указывать на что-то :-)
Например, чтобы не копировать блок данных метров на 300 в ОП лишний раз. Проще взять указатель на начало блока и его длину.
Переменные хранят значения, а указатели только адреса памяти. Указатели всегда занимают 2 байта, например, double туда уже не запихнуть. Наверное как-то так…
Похожие вопросы
- Скорость работы указателей и переменных? С++
- Указатели это переменные в которых содержатся адреса других переменных?
- Чем отличается в языке С++ объявление указателя на переменную int *a от int* a?
- да зачем нужны эти указатели ?? C++. Зачем нужны указатели? почему не обойтись без простой переменной??
- Список с использованием указателей на Си
- Чем указатели отличаются от переменных? (С++)
- Зачем нужны указатели в c++? Нельзя ли обычными переменными пользоваться?
- Два вопроса про указатели в С++ внутри.
- Вопрос про указатели в С++ внутри
- СЛОЖНА! С++ Начал читать про указатели. Скопилось куча вопросов. Помогите!