Указатели на int в c++ [закрыт]


Что в этом плохого: я просто хотел указать на int и дать этому ints значение 0.

    int* p;int* q;

*p = 0; *q = 0;
cout<<"p = "<<*p<<" q = "<<*q<<endl;

Это раздражает

Работы:

int* p;
   *p = 0;

   cout<<*p<<endl;

Аварии:

     int* p;
   int* q;
   *p = 0;
   *q = 0;

   cout<<*p<<endl;
3 2

3 ответа:

Чтобы использовать указатель, этот указатель должен указывать на что-то. Итак, есть два шага: создать указатель и создать то, на что он указывает.

int *p, *q;    // create two pointers
int a;         // create something to point to
p = &a;        // make p point to a
*p = 0;        // set a to 0
q = new int;   // make q point to allocated memory
*q = 0;        // set allocated memory to 0
WORKS:

int* p;
*p = 0;

Нет! кажется, что это работает, но на самом деленеопределенное поведение .

Объявление int* whatever; оставляет вас с неинициализированным указателем. Вы не можете разыменовать его.

Чтобы инициализировать указатель и установить значение, на которое он указывает, равным 0 (в вашем случае):

int* p = new int(0);

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

Используйте int something = new int(<initialization_value>); для инициализации указателя.