Я всегда думал, что если я объявлю эти три переменные, то все они будут иметь значение 0
int column, row, index = 0;
Но я считаю, что только индекс равен нулю, а остальные такие же, как 844553 и 2423445.
Как я могу инициализировать все эти переменные в ноль, не объявляя каждую переменную в новой строке?
int* a, b, c;
не выполняется так, как это выглядит).=0
для каждой в своих определениях. И, если вам действительно нужно много переменных, попробуйте массив:int a[10]={0}
инициализирует каждуюa[i]
для вас 0.Ответы:
источник
Когда вы заявляете:
Только индекс установлен на ноль.
Однако вы можете сделать следующее:
Но лично я предпочитаю следующее, на которое было указано.
Это более читаемая форма, на мой взгляд.
или
источник
bool previousInputValue, presentInputValue;
) или же они просто имеют один и тот же тип сейчас, но не обязательно должны быть (uint8_t height, width;
могут превратиться вuint8_t height; uint16_t width;
будущее и должны были бытьuint8_t height; uint8_t width;
начать с).uint8_t height; uint16_t width;
вместо того, чтобыuint8_t height, width;
сохранить 10 символов в будущем. :-) Конечно, вы можете делать это как хотите. Просто убедитесь, что вы делаете это легко читать. Таким образом, последняя форма является наиболее явной.int presentValue = 0; typeof(presentValue) previousValue = presentValue;
, но я считаю, чтоtypeof()
это нестандартное расширение GCC.Как сказал @Josh, правильный ответ:
Вам нужно следить за тем же с помощью указателей. Это:
Эквивалентно:
источник
unsigned long x, y;
объявленоx
как,unsigned long
ноy
как разunsigned
, иначеunsigned int
! Это точно так же! </ rant>int *a
средство,*a
представляющееint
значение.void* a
будет компилировать иvoid *a, b, c
не будет. Эта рационализация работает для меня.Если вы объявляете одну переменную / объект на строку, это не только решает эту проблему, но и делает код более понятным и предотвращает глупые ошибки при объявлении указателей.
Чтобы напрямую ответить на ваш вопрос, вы должны явно инициализировать каждую переменную равной 0.
int a = 0, b = 0, c = 0;
,источник
Обратите внимание, что эта форма будет работать и с пользовательскими типами, особенно когда их конструкторы принимают более одного аргумента.
источник
auto
...): int column { 0 } , строка { 0 } , индекс { 0 } ;Начиная с 2k18, вы можете использовать структурированные привязки :
Demo
источник
Возможные подходы:
memset
или{0}
массив.struct
, и /memset
или есть конструктор, который будет инициализировать их в ноль.источник
Я бы не рекомендовал это, но если вы действительно хотите, чтобы это была одна строка и только один раз написать 0, вы также можете сделать это:
источник
Как уже упоминалось, начиная с C ++ 17 вы можете использовать структурированные привязки для множественных присвоений переменных.
Комбинируя это с вычетом аргумента
std::array
и аргумента шаблона, мы можем написать функцию, которая присваивает значение произвольному числу переменных без повторения типа или значения .Demo
источник
Когда вы объявляете переменную без ее инициализации, выбирается случайное число из памяти, и переменная инициализируется этим значением.
источник