2015-10-03 3 views
2

У меня есть вопрос об инициализации массиваРазница между 0 и '0' в массиве

В чем разница между

символ а [6] = {0};

и

символ а [6] = { '0', '0', '0', '0', '0', '0'};

Как компилятор интерпретирует вышеуказанное выражение? Они такие же или нет?

+1

Это не имеет никакого отношения к массивам. – EJP

+1

Возможный дубликат [В чем разница между NULL, '\ 0' и 0] (http://stackoverflow.com/questions/1296843/what-is-the-difference-between-null-0-and-0) –

ответ

3

'0' является ASCII символом для числа 0. Его значения 48.

Константы 0 является нулевых байт или нулевых байтами, также записываются '\0'.

Эти четыре эквивалентны:

char a[6] = {0}; 
char a[6] = {0, 0, 0, 0, 0, 0}; 
char a[6] = {'\0', '\0', '\0', '\0', '\0', '\0'}; 
char a[6] = "\0\0\0\0\0"; // sixth null byte added automatically by the compiler 
1

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

0 - буква, которая дает числовое значение, равное нулю. '\0' - это буква, которая дает символ с числовым значением нуля.

Ввод значений в массив не изменит это значение.

Вы можете проверить это, используя что-то вроде

#include <iostream> 

int main() 
{ 
    std::cout << "Character \'0\' does " 
    if (0 != '0') std::cout << "not "; 
    std::cout << "have numeric value zero\n"; 

    std::cout << "Character \'\\0\' does " 
    if (0 != '\0') std::cout << "not "; 
    std::cout << "have numeric value zero\n"; 
    return 0; 
} 

, который всегда будет распечатать

Character '0' does not have numeric value zero 
Character '\0' does have numeric value zero 

Некоторые компиляторы могут дать предупреждение о коде выше, потому что 0 (прикрас) типа int, '0' имеет тип char и '\0' также имеет тип char. (Также могут быть предупреждения, поскольку сравнения включают значения, известные во время компиляции). Сравнение допускается, но включает преобразования типов, которые могут указывать на ошибки программиста в некоторых случаях.

Смежные вопросы