2016-08-06 1 views
-5

В следующих кодов:, что это отличается от «нового()» и «Int Int * р»

int *p; 
*p = 10; 
int *q = new() int(10); 

Я хочу знать разницу между p и q. Можно ли заменить int *q = new() int(10) на int *q; *q = 10? Большое спасибо.

+4

'INT * р;' не инициализирован, следовательно, '* р = 10;' не определено поведение. –

+0

Я думаю, да, потому что вы уже вызывают * неопределенное поведение *, и новый код не будет генерировать ошибку компиляции. – MikeCAT

ответ

-1

Нет. Они далеки от того же.

Это:

INT * р; * p = 10;

Объявляет (неинициализированный) указатель на int по имени p. Затем присваивает значение 10, на что указывает p. Это «неопределенное поведение», так как p неинициализирован.

Это:

INT * д = новый() INT (10);

Объявляет Int указатель q и инициализирует его, чтобы указать на хранение выделенного new который выделил пространство для 10 INT (если не принимать во внимание синтаксически неправильно «()» после того, как новый).

Подводя итог: оба - как написано - недействительны, сломанный код, но не то же самое.

Примечание: new(...) является «местом размещения нового», которое не является тем, что вы хотите здесь.

0
int *p; 
*p = 10; 

Разыменование неинициализированный указатель имеет неопределенное поведение.

int *q = new() int(10); 

Это синтаксически неверно, так как следующее сообщение компилятор показывает:

main.cpp:7:18: error: expected expression-list or type-id 
    int *q = new() int(10); 
       ^

Таким образом, чтобы ответить на этот вопрос ...

Может int *q = new() int(10) be replac ed int *q; *q = 10 где угодно?

№ Ни один из них не может использоваться в любом месте программы.

+0

'int * q = new() int (10); std :: cout << * q' правильно на моем компьютере, я использую linux. – thiiiiiking

0
int *p 

Это определяет указатель p. Поскольку он не инициализирован, p указывает на неизвестную ячейку памяти.

*p = 10; 

Это пытается установить ячейку памяти 10. Поскольку ячейка памяти неизвестен, это приводит к неопределенному поведению.

Правильный код для инициализации д 10 является

int *q = new int; 

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

*q = 10; 

Это инициализирует эту ячейку памяти до 10.