Допустим ли строчный нуль в C ++? - PullRequest
3 голосов
/ 19 июня 2019

Меня спросили в интервью "Какие из следующих инициализаций указателя действительны?", И я заполнил форму примерно так:

// valid
    int* p1 = 0;
    int* p2 = 2-2;
    int* p6 = new int;
// invalid
    int* p3 = 1; 

    int z = 0;
    int* p4 = z;
// ???
    int* p5 = null;

Мой вопрос: есть ли строчные буквы null в любомверсия спецификации языка C ++?

Ответы [ 4 ]

15 голосов
/ 19 июня 2019

Есть ли строчные буквы null в любой версии спецификации языка C ++?

номер

7 голосов
/ 19 июня 2019

Ответ одним словом будет НЕТ.

попробуйте следующий код

  #include <iostream>
#include <stdlib.h>
using namespace std;
int main(){
    int *p = null;
    int *q = NULL;
    return 0;
}

Это дает следующую ошибку при компиляции:

ошибка: 'null' былне заявлено в этой области

Что само собой разумеется.

1 голос
/ 19 июня 2019

Ответ написан в некоторых заголовочных файлах.NULL - это предопределенный макрос в этих заголовочных файлах, таких как **

-> #define NULL 0

**.Следовательно, мы можем определить только заглавными буквами «NULL», чтобы избежать завершения компиляции.

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

0 голосов
/ 19 июня 2019

Нет, но вы можете определить это

#define null NULL

что, вероятно, не полезно для вас, поскольку

спросили в интервью

...