У меня есть вопрос об инициализации массиваРазница между 0 и '0' в массиве
В чем разница между
символ а [6] = {0};
и
символ а [6] = { '0', '0', '0', '0', '0', '0'};
Как компилятор интерпретирует вышеуказанное выражение? Они такие же или нет?
У меня есть вопрос об инициализации массиваРазница между 0 и '0' в массиве
В чем разница между
символ а [6] = {0};
и
символ а [6] = { '0', '0', '0', '0', '0', '0'};
Как компилятор интерпретирует вышеуказанное выражение? Они такие же или нет?
'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
'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
. (Также могут быть предупреждения, поскольку сравнения включают значения, известные во время компиляции). Сравнение допускается, но включает преобразования типов, которые могут указывать на ошибки программиста в некоторых случаях.
Это не имеет никакого отношения к массивам. – EJP
Возможный дубликат [В чем разница между NULL, '\ 0' и 0] (http://stackoverflow.com/questions/1296843/what-is-the-difference-between-null-0-and-0) –