Зачем нужны указатели С++?
-
Guest
Зачем нужны указатели С++?
Мы сейчас их изучаем, я понимаю ка кими пользоватся но вот одного понять не могу - зачем они нужны? То есть покажите пример где указатели использовать более эффективно или вобще без них не обойтись? Заранеее спасибо за любую помощь!
-
suxxl
Re: Зачем нужны указатели С++?
Например у тебя есть массив символов, и есть указатель, который указывает на этот массив...
т.е. массив - просто переменная
указатель - место в памяти
записывать информацию нужно соответственно не в переменную а в память (указатель)...
это как пример
[s]Исправлено: suxxl, 0:07 4-05-2004[/s]
т.е. массив - просто переменная
указатель - место в памяти
записывать информацию нужно соответственно не в переменную а в память (указатель)...
это как пример
[s]Исправлено: suxxl, 0:07 4-05-2004[/s]
-
netmax
Re: Зачем нужны указатели С++?
Guest
Что народ писал. Все конечно правильно. Но кроме работы с массивами указатели используются для передачи данных неизвестных объемов. Некоторым функциям вообще не важно с какими данными они работают, им важно знать где они (эти данные находятся) и какова их длина. А как ты скажешь о место нахождении этих данных если не воспользуешься указателями. Но это в основном относится к Си. А в С++ с помощью указателей работает такая ВЕЛИКАЯ вешь как полиморфизм.
Что народ писал. Все конечно правильно. Но кроме работы с массивами указатели используются для передачи данных неизвестных объемов. Некоторым функциям вообще не важно с какими данными они работают, им важно знать где они (эти данные находятся) и какова их длина. А как ты скажешь о место нахождении этих данных если не воспользуешься указателями. Но это в основном относится к Си. А в С++ с помощью указателей работает такая ВЕЛИКАЯ вешь как полиморфизм.
-
bgg0408
Re: Зачем нужны указатели С++?
Guest
Указатели в Си были введены для более удобной работы с массивами. Так, к примеру, имя массива - (константный) указатель на его первый элемент. А теперь представьте, что массив не статический, а динамический...
Указатели в Си были введены для более удобной работы с массивами. Так, к примеру, имя массива - (константный) указатель на его первый элемент. А теперь представьте, что массив не статический, а динамический...
-
bgg0408
Re: Зачем нужны указатели С++?
В си функция может вернуть только одно определенное значение. К примеру, если тебе нужно вернуть массив данных, нельязя написать return a[N], но ты можешь вернуть указатель на этот массив. Здеся без указателей никуда
*
* * * *
* * * * *
-
bgg0408
Re: Зачем нужны указатели С++?
Развлекался нынче так:
Цитата:
//Generate a NAN(Not A Number)
double a;
((int *)&a)[0]=0xffffffff;
((int *)&a)[1]=0xffffffff;
Догадайтесь, что этот год делает
Цитата:
//Generate a NAN(Not A Number)
double a;
((int *)&a)[0]=0xffffffff;
((int *)&a)[1]=0xffffffff;
Догадайтесь, что этот год делает

-
Dimon
Re: Зачем нужны указатели С++?
bgg0408
Ну ты завернул!
Где такую траву берешь? 
Без компилятора: производится преобразование адреса А в инт, а затем по этому адресу кладется значение? Хотя массив...
Блин, аж голова разболелась - давно на Сях писал...
Нельзя так людей мучать 
Ну ты завернул!
Где такую траву берешь? 
Без компилятора: производится преобразование адреса А в инт, а затем по этому адресу кладется значение? Хотя массив...
Блин, аж голова разболелась - давно на Сях писал...
Нельзя так людей мучать 
-
Ginger
-
bgg0408
Re: Зачем нужны указатели С++?
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

[s]Исправлено: bgg0408, 23:36 6-05-2004[/s]
Цитата:
нифига не делает
не компилится даже
(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

[s]Исправлено: bgg0408, 23:36 6-05-2004[/s]
-
hasherfrog
Re: Зачем нужны указатели С++?
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));
}