В следующих кодов:, что это отличается от «нового()» и «Int Int * р»
int *p;
*p = 10;
int *q = new() int(10);
Я хочу знать разницу между p
и q
. Можно ли заменить int *q = new() int(10)
на int *q; *q = 10
? Большое спасибо.
В следующих кодов:, что это отличается от «нового()» и «Int Int * р»
int *p;
*p = 10;
int *q = new() int(10);
Я хочу знать разницу между p
и q
. Можно ли заменить int *q = new() int(10)
на int *q; *q = 10
? Большое спасибо.
Нет. Они далеки от того же.
Это:
INT * р; * p = 10;
Объявляет (неинициализированный) указатель на int по имени p
. Затем присваивает значение 10
, на что указывает p
. Это «неопределенное поведение», так как p
неинициализирован.
Это:
INT * д = новый() INT (10);
Объявляет Int указатель q
и инициализирует его, чтобы указать на хранение выделенного new
который выделил пространство для 10 INT (если не принимать во внимание синтаксически неправильно «()» после того, как новый).
Подводя итог: оба - как написано - недействительны, сломанный код, но не то же самое.
Примечание: new(...)
является «местом размещения нового», которое не является тем, что вы хотите здесь.
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 edint *q; *q = 10
где угодно?
№ Ни один из них не может использоваться в любом месте программы.
'int * q = new() int (10); std :: cout << * q' правильно на моем компьютере, я использую linux. – thiiiiiking
int *p
Это определяет указатель p. Поскольку он не инициализирован, p указывает на неизвестную ячейку памяти.
*p = 10;
Это пытается установить ячейку памяти 10. Поскольку ячейка памяти неизвестен, это приводит к неопределенному поведению.
Правильный код для инициализации д 10 является
int *q = new int;
Это выделяет пространство памяти для междунар и затем д делается, чтобы указать на это место памяти.
*q = 10;
Это инициализирует эту ячейку памяти до 10.
'INT * р;' не инициализирован, следовательно, '* р = 10;' не определено поведение. –
Я думаю, да, потому что вы уже вызывают * неопределенное поведение *, и новый код не будет генерировать ошибку компиляции. – MikeCAT