Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Зачем нужны указатели С++? (http://forum.oszone.net/showthread.php?t=29744)

Guest 03-05-2004 18:19 205591

Мы сейчас их изучаем, я понимаю ка кими пользоватся но вот одного понять не могу - зачем они нужны? То есть покажите пример где указатели использовать более эффективно или вобще без них не обойтись? Заранеее спасибо за любую помощь!

suxxl 03-05-2004 22:04 205592

Например у тебя есть массив символов, и есть указатель, который указывает на этот массив...
т.е. массив - просто переменная
указатель - место в памяти
записывать информацию нужно соответственно не в переменную а в память (указатель)...
это как пример

[s]Исправлено: suxxl, 0:07 4-05-2004[/s]

bgg0408 03-05-2004 23:05 205593

Guest
Указатели в Си были введены для более удобной работы с массивами. Так, к примеру, имя массива - (константный) указатель на его первый элемент. А теперь представьте, что массив не статический, а динамический...

Lexxuss 05-05-2004 21:07 205594

В си функция может вернуть только одно определенное значение. К примеру, если тебе нужно вернуть массив данных, нельязя написать return a[N], но ты можешь вернуть указатель на этот массив. Здеся без указателей никуда :) *
* * * *

bgg0408 06-05-2004 18:36 205595

Развлекался нынче так:
Цитата:

//Generate a NAN(Not A Number)
double a;
((int *)&a)[0]=0xffffffff;
((int *)&a)[1]=0xffffffff;
Догадайтесь,  что этот год делает :lol:

Dimon 06-05-2004 20:17 205596

bgg0408
Ну ты завернул! :up: Где такую траву берешь? :)
Без компилятора: производится преобразование адреса А в инт, а затем по этому адресу кладется значение? Хотя массив...
Блин, аж голова разболелась - давно на Сях писал... :( Нельзя так людей мучать :)


Ginger 06-05-2004 21:00 205597

нифига не делает =)
не компилится даже
(JFE nad GCC C/C++ compiler)

bgg0408 06-05-2004 23:30 205598

Ginder
Цитата:

нифига не делает =)
не компилится даже
(JFE nad GCC C/C++ compiler)
Все путем! Я юзал VC.NET, хотя стандарт языка ДОЛЖЕН такой наворот поддерживать!
А ты в main этот код добавила?


Цитата:

Ну ты завернул! *Где такую траву берешь?
Спасибо! Это я сам такое генерю!!!
Смысл кода в том, что я обращаюсь к переменной double, как массиву 2-х int'ов(чтобы по 4 байта), затем чтобы сгенерировать NAN, выставим все поля double вручную, т.к. компилятор не позволяет сгенерировать это чудесное число напрямую. Он его не знает :(
Есть еще один способ получить NAN:
Цитата:

double a,b,c;
a=0; b=0;
c=a/b; // NAN - нечисло
a=1; b=0;
c=a/b; //+infinity - плюсовая бесконечнось
a=-1; b=0;
c=a/b; //-infinity
:gigi: :gigi:


[s]Исправлено: bgg0408, 23:36 6-05-2004[/s]

hasherfrog 07-05-2004 08:39 205599

bgg0408
Код:

float getNaNQ ()
{
  unsigned long num = 0xffffffffUL;
  return *(float*)#
}
 
int isNaNQorInf (float num_)
{
  float num = num_;
  return ((*(long *)&num & 0x7f800000L) == 0x7f800000L);
}
 
int isInf (float num_)
{
  float num = num_;
  return (((*(long *)&num & 0x7f800000L) == 0x7f800000L) && \
          ((*(long *)&num & 0x007fffffL) == 0x00000000L));
}
 
isNaNQ (float num_)
{
  float num = num_;
  return (((*(long *)&num & 0x7f800000L) == 0x7f800000L) && \
          ((*(long *)&num & 0x007fffffL) != 0x00000000L));
}

:rotate:

bgg0408 07-05-2004 23:31 205600

hasherfrog
Крут, крут :) Ничего не скажешь :D Замечу: и всё указатели как-то используются :)

netmax 08-05-2004 18:37 205601

Guest
Что народ писал. Все конечно правильно. Но кроме работы с массивами указатели используются для передачи данных неизвестных объемов. Некоторым функциям вообще не важно с какими данными они работают, им важно знать где они (эти данные находятся) и какова их длина. А как ты скажешь о место нахождении этих данных если не воспользуешься указателями. Но это в основном относится к Си. А в С++ с помощью указателей работает такая ВЕЛИКАЯ вешь как полиморфизм.


Время: 10:58.

Время: 10:58.
© OSzone.net 2001-