Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Нафига{ нужны/ указатели???

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Нафига{ нужны/ указатели???
Имя
Сообщение << Старые топики   Новые топики >>
Нафига{ нужны/ указатели??? - 2007-08-22 07:31:10.366666   
Lanalex92

Сообщений: 23
Оценки: 0
Присоединился: 2007-08-14 07:03:05.706666
Недавно начал я с++ изучать по учебнику павловской…вроде все понятно,кроме одного - ЗАЧЕМ нужны указатели в си? у неё в учебнике непонятно написано…Объясните.плиз
(З.Ы.В гугль посылать не надо - я уже там был - ниче толковово не написано.)
Post #: 1
RE: Нафига{ нужны/ указатели??? - 2007-08-22 08:01:02.610000   
Hack_

Сообщений: 180
Оценки: 0
Присоединился: 2007-04-20 11:03:24.856666
Указатели предоставляют программам возможность моделировать передачу данных в функцию по ссылке, что увеличивает эффективность и создавать и манипулировать динамическими структурами данных, т.е. структурами данных, которые могут нарастать и сокращаться, например, такими как связные списки, очереди, стеки и деревья.
Post #: 2
RE: Нафига{ нужны/ указатели??? - 2007-08-22 09:30:22.850000   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36
таким людям нада отвечать другим языком: указатель, это таже переменная, только содержит адрес ячейки памяти, в которой лежат полезные данные, обьём которых ограничен только размером памяти. Т.е. если указатель занимает например 2 слова, то данные, к которым он "ведёт" могут занимать много больший обьём… Когда у тебя есть ф-я, которая например декодирует пакетированый поток данных, размер пакета 1 Мб, то что легче отправить? указатель или 1 метр данных? Правильно! Указатель… Или допустим у тебя есть некая строка символов, и тебе быстро нада получить их коды, ты просто создаёш указатель, который указывает на эти символы, но тип данных задаёш например Int, Byte(чел. числ)… и при разном обращении к одинаковым данным они будут иметь "разное значение"… и т.д. У указателя очень много применений, и не зря они даже реализованы на аппаратном уровне.
Post #: 3
RE: Нафига{ нужны/ указатели??? - 2007-08-22 13:09:20.770000   
necrostaz

Сообщений: 172
Оценки: 0
Присоединился: 2007-02-27 15:54:59.460000
quote:

и не зря они даже реализованы на аппаратном уровне.
что ты имеешь ввиду? указатель ж это абстракция в языке Си а на деле просто адрес
Post #: 4
RE: Нафига{ нужны/ указатели??? - 2007-08-22 13:48:16.626666   
tt_andrey

Сообщений: 213
Оценки: 0
Присоединился: 2007-07-03 13:54:36.440000
бугога, аффтар жжот! пейшы исчо!
Post #: 5
RE: Нафига{ нужны/ указатели??? - 2007-08-22 14:35:51.360000   
saimon 2metra

Сообщений: 4281
Оценки: 0
Присоединился: 2007-01-26 10:56:51.426666
С указателями ваще самая жопа! Будьте очень внимательны, т.к. невовремя разадресованные или наоборот вовремя неразадресованные переменные приводят к порче памяти проги.
Post #: 6
RE: Нафига{ нужны/ указатели??? - 2007-08-22 18:41:06.403333   
Kill_em_all

Сообщений: 395
Оценки: 0
Присоединился: 2005-03-25 22:40:01
Ты имеешь ввиду утечки памяти? Ну можно невсегда ее освобождать. Хотя за правило
всегда освобождать память взять стоит
Post #: 7
RE: Нафига{ нужны/ указатели??? - 2007-08-22 19:57:07.066666   
Yashin

Сообщений: 964
Оценки: 0
Присоединился: 2007-05-09 20:18:01.153333
указатель - это пременная, которая содержит в себе адрес другой переменной. адрес переменной - это расстояние в байтах от начала блока памяти до самой переменной.
Post #: 8
RE: Нафига{ нужны/ указатели??? - 2007-08-22 21:08:49.686666   
tt_andrey

Сообщений: 213
Оценки: 0
Присоединился: 2007-07-03 13:54:36.440000
она хранит виртуальный адрес переменной :P
Post #: 9
RE: Нафига{ нужны/ указатели??? - 2007-08-22 22:01:42.540000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: Yashin

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

Типа того, плюс требует некоторых специфических навыков, а еще лучше понимания происхдящего.
Зачем нужны?
Лучше на примере.
Предположим, мы имеем некоторый очень сложный вычислительный алгоритм, который требуется реализовать.
Он (алгоритм) предполагает наличие некоторого списка.
Далее, если все элементы списка будут иметь одинаковую структуры алгоритм значительно упрощается, начинают работать некоторые формализованные решения. Но данные в списке имеют разную длину и вообще разнотипные.
Как быть?
А просто.
Запихиваем в список не сами данные, а указатели на них. И пишем пару процедур, которые позволяют получить по указателю реальные данные.
Все становится просто и логично.


Post #: 10
RE: Нафига{ нужны/ указатели??? - 2007-08-22 22:15:12.750000   
T

Сообщений: 1100
Оценки: 0
Присоединился: 2006-01-14 00:15:36

quote:

ORIGINAL: necrostaz

quote:

и не зря они даже реализованы на аппаратном уровне.
что ты имеешь ввиду? указатель ж это абстракция в языке Си а на деле просто адрес

изучай АСМ
Post #: 11
RE: Нафига{ нужны/ указатели??? - 2007-08-23 01:29:31.813333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25

quote:

ORIGINAL: necrostaz

quote:

и не зря они даже реализованы на аппаратном уровне.
что ты имеешь ввиду? указатель ж это абстракция в языке Си а на деле просто адрес

указатель – это переменная хранящая адрес. :)
насчёт указателей на аппаратном уровне я тоже не совсем понял, но тем не менее адрес и указатель – это несколько разные вещи. адрес – это значение указателя. так же как целое число – это значение переменной типа int.
Post #: 12
RE: Нафига{ нужны/ указатели??? - 2007-08-23 17:21:06.590000   
necrostaz

Сообщений: 172
Оценки: 0
Присоединился: 2007-02-27 15:54:59.460000
quote:

изучай АСМ
изучал уже когда-то )) указателей там нет,есть регистры,сегменты,смещения а указателей нема ))

UPD Хотя если имеется ввиду адресация, то на мой взгляд это тоже абстракция, просто в качестве данных выступают адреса.
Post #: 13
RE: Нафига{ нужны/ указатели??? - 2007-08-23 17:25:32.440000   
necrostaz

Сообщений: 172
Оценки: 0
Присоединился: 2007-02-27 15:54:59.460000
quote:

адрес – это значение указателя


это и имелось ввиду, хотя конечно надо быть точнее ))
Post #: 14
RE: Нафига{ нужны/ указатели??? - 2007-08-23 17:45:45.230000   
furiousangel

Сообщений: 1116
Оценки: 0
Присоединился: 2005-05-28 06:31:47
указатели позволяют вызывать например функции косвенно.
если есть некоторая структура, одним з полей которой есть другая структура точно такого же типа то компилятор тебя просто пошлет или скомпилит с такими косяками… выход использовать вместо структуры вложеной в структуру такого же типа указатель на структуру такого же типа.
примеров куча, особенно неявных… такие выкруты применяются очень редко

ЗЫ. Сам учу по этой книге Си…. говенная книга имхо. Она приводит примеры х3 откуда. И не пишет зачем оно надо.
Керниган думаю лучше пойдет. Через недельку должны подвезти ANSI C.
Post #: 15
RE: Нафига{ нужны/ указатели??? - 2007-08-23 18:15:58.913333   
Yashin

Сообщений: 964
Оценки: 0
Присоединился: 2007-05-09 20:18:01.153333
применяются в списках. Список это набор данных определленного типа. Каждый элемент списка хранит в себе адрес следующего списка(однонаправленный список) и возможно предыдущего(двунаправленный). Чтобы найти какой либо элемент в списке, нужно знать, хотя бы начальный элемент для однонаправленного, или конечный элемент для двунаправленного. Показал бы на примере, но я Си не знаю.

Извините не в тему, вот пример на паскале,но язык хорошо читается думаю поймете.
Простейший список type pnum = ^tnum; tnum = record x: Integer; next: pnum; end; var FirstElem: tnum; p: pnum; begin // Создание 15 элементов For i=0 to 14 do begin new(p); // Эта функция выделяет память для переменной типа tnum и помещает ее адрес в переменную p. p.x := Random(100); p^.next := FirstElem.next; FirstElem.next := p; // То есть мы вставили новый элемент вторым после начала списка, а остальные сдвинулись вперед. end; end.
Post #: 16
RE: Нафига{ нужны/ указатели??? - 2007-08-23 18:20:39.313333   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
Да где они только не применяются…

Post #: 17
RE: Нафига{ нужны/ указатели??? - 2007-08-25 12:45:06.010000   
int21h

Сообщений: 105
Оценки: 0
Присоединился: 2007-08-25 12:05:16.730000
Указатель - вобще указатели называют "Переменная типа указатель" тоесть указатель работает с адресами и значениями переменных
1. работа с адресами на С (см.ниже)
#include <stdio.h>

void main()
{
int f,c=21,*p; /* f и с обычние переменные типа int , *p - указатель типа int */
f=c+5; /* тут всё ясно */
p=&f; /*указатель p указывает на переменную f , &- для получения адреса */
printf(" %p \n"); /* выводим адрес указателя , так как указатель указывает на пер. F , то этот же адрес имеет переменная f */
}(извените что так подробно)
2.Работа со значениями хранищимися в указателях (разыменование)
вот у нас есть переменная int s ; она должна получить значение указателя int *p; каторый указывает допустим на какуюто переменную int v=55 ;\\ инициализировали и присвоили значение ; p=&v; \\ использовали указатель … так что указатель p указывает на переменную v ; теперь нам нужно чтоб переменная s получила значение хранящиеся в указателе p - > итог s=*p ; (всё очень просто, пыталсо максимально подробно объеснить)
Post #: 18
RE: Нафига{ нужны/ указатели??? - 2007-08-25 14:53:50.396666   
tt_andrey

Сообщений: 213
Оценки: 0
Присоединился: 2007-07-03 13:54:36.440000
quote:

printf(" %p \n");


следовало написать

printf("%0X \n", p);
Post #: 19
RE: Нафига{ нужны/ указатели??? - 2007-08-25 15:16:19.860000   
int21h

Сообщений: 105
Оценки: 0
Присоединился: 2007-08-25 12:05:16.730000
Кстати совет , всегда старайтесь по мере необходимости инициализировать указатели ! как только создали указатель присвойте ему к примеру значение 0 . Вот из-за таких мелочей и получаюцо дыры в ОС'ах …

p.s. Ссылки вас не спасут :)
Post #: 20
RE: Нафига{ нужны/ указатели??? - 2007-08-28 23:18:50.943333   
Yashin

Сообщений: 964
Оценки: 0
Присоединился: 2007-05-09 20:18:01.153333
int21h, а разве в VB есть указатели?
Post #: 21
RE: Нафига{ нужны/ указатели??? - 2007-08-28 23:49:54.283333   
sergzone

Сообщений: 33
Оценки: 0
Присоединился: 2007-08-28 19:41:52.666666
Указатели нужны для операции с паметью. Например иногда надо создать структуру бинарного дерева, хипа, хэша или просто листа для содержания тои или инои информацыи. Для етого используются указателя для того чтобы соеденить "листья" твоеи структуры (напр. бинарное дерево) ну а потом сохранить информацию в ячеику памяти (листе) а потом ее быстро наити и куда либо передать. Указатели так же очень стали популярны для обхода всяческих систем засчиты от вирусов и т.п. так как ти можешь делать вызовы АПИ используя обыкновенные указатели.
Ну а сам указатель указывает на адресс в памяти. После того как указатель получает адресс, ты можешь писать в ету ячеику памяти через сам указатель.
Post #: 22
RE: Нафига{ нужны/ указатели??? - 2007-08-29 13:48:21.733333   
int21h

Сообщений: 105
Оценки: 0
Присоединился: 2007-08-25 12:05:16.730000

quote:

ORIGINAL: Yashin

int21h, а разве в VB есть указатели?


Речь идёт о С++ , к чему ты VB приплёл ?!
Post #: 23
RE: Нафига{ нужны/ указатели??? - 2007-08-29 23:21:27.270000   
Yashin

Сообщений: 964
Оценки: 0
Присоединился: 2007-05-09 20:18:01.153333
я думал ты на нем кодишь
Post #: 24
RE: Нафига{ нужны/ указатели??? - 2007-08-29 23:44:02.423333   
int21h

Сообщений: 105
Оценки: 0
Присоединился: 2007-08-25 12:05:16.730000
Я пишу на С стандарт 99-ого кода ! на VB пишу офисные утилиты , ассемблер - там где это необходимо (восновном читаю листинги дизассемблированного кода, полученного с помощью IDA Pro)

>> int21h, а разве в VB есть указатели?
Самого понятия как указатель нет , но есть что-то похожее , к сожалению не помню … так как системщина на С пишицо :-)(
Post #: 25
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Нафига{ нужны/ указатели???







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.