Зачем нужны указатели С++?

Аватара пользователя
Guest

Зачем нужны указатели С++?

Сообщение Guest »

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

Re: Зачем нужны указатели С++?

Сообщение suxxl »

Например у тебя есть массив символов, и есть указатель, который указывает на этот массив...

т.е. массив - просто переменная

указатель - место в памяти

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

это как пример



[s]Исправлено: suxxl, 0:07 4-05-2004[/s]
Аватара пользователя
netmax

Re: Зачем нужны указатели С++?

Сообщение netmax »

Guest

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

Re: Зачем нужны указатели С++?

Сообщение bgg0408 »

Guest

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

Re: Зачем нужны указатели С++?

Сообщение bgg0408 »

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

* * * *
Аватара пользователя
bgg0408

Re: Зачем нужны указатели С++?

Сообщение bgg0408 »

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


Цитата:



//Generate a NAN(Not A Number)

double a;

((int *)&a)[0]=0xffffffff;

((int *)&a)[1]=0xffffffff;



Догадайтесь,  что этот год делает Изображение
Аватара пользователя
Dimon

Re: Зачем нужны указатели С++?

Сообщение Dimon »

bgg0408

Ну ты завернул! Изображение Где такую траву берешь? Изображение

Без компилятора: производится преобразование адреса А в инт, а затем по этому адресу кладется значение? Хотя массив...

Блин, аж голова разболелась - давно на Сях писал... Изображение Нельзя так людей мучать Изображение
Аватара пользователя
Ginger

Re: Зачем нужны указатели С++?

Сообщение Ginger »

нифига не делает Изображение

не компилится даже

(JFE nad GCC C/C++ compiler)
Аватара пользователя
bgg0408

Re: Зачем нужны указатели С++?

Сообщение bgg0408 »

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]
Аватара пользователя
hasherfrog

Re: Зачем нужны указатели С++?

Сообщение hasherfrog »

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)); 
}

Изображение
Ответить

Вернуться в «Программирование и базы данных»