#c #syntax
Вопрос:
Прежде чем я начну, я плохо говорю по-английски, поэтому я использую переводчика, так что вы можете плохо понять.
Мне так жаль. Но содержание вопроса простое, так что, вероятно, нет никаких трудностей в понимании.
Однажды я не очень хорошо помню, но я увидел код, похожий на приведенный ниже.
#include <stdio.h>
int main(){
int a,b,c = 1,d,e;
return 0;
}
В то время я просто отпустил это. Но теперь, когда я думаю об этом, мне становится любопытно.
Поэтому я проверил значение C, и оно было напечатано 1.
И я изменил 1 на 0 и подтвердил, что значение C равно нулю.
Этот результат был таким же для других чисел.
Я никогда раньше не видел такого кода.
В то же время я знал, что для объявления ряда переменных мне придется выполнить код, приведенный ниже.
int a = 1, b = 2, c = 3;
Но это было не то, что я знал.
После нескольких экспериментов я обнаружил, что a,b,c,d,e являются независимыми переменными.
За исключением C, a,b,d,e, содержащих значение мусора.
Интересно, почему это грамматически возможно и почему значения не распределены по порядку слева направо.
Еще раз прошу прощения за использование переводчика.
Комментарии:
1. Дело в том, что вы можете объявить переменные, а затем инициализировать любую переменную, какую захотите. Не существует грамматического правила для инициализации слева направо.
2. ; — это знак препинания, который завершает присвоение или инициализацию при объявлении переменных. Допустимо объявлять несколько переменных до ;.
3. Боже, это была действительно простая вещь. Большое вам спасибо, ребята !!
Ответ №1:
int a,b,c = 1,d,e;
это то же самое, что
int a;
int b;
int c = 1;
int d;
int e;
Ответ №2:
За исключением C, a,b,d,e содержит значение мусора — это связано с тем, что только C одновременно объявлен и инициализирован значением 1. Другие просто объявляются в случайной ячейке памяти, следовательно, имеют значения мусора
Интересно, почему это грамматически возможно — все равно это правильный синтаксис. Смотрите ответ @pmg
В то же время я знал, что для объявления ряда переменных мне придется выполнить код, приведенный ниже. int a = 1, b = 2, c = 3;
— Здесь вы фактически объявляете, а также инициализируете их различными значениями. Вы всегда можете объявить любое количество переменных (одного и того же типа данных) в одном операторе.
Комментарии:
1. Спасибо! Я думал, что левая и правая стороны различаются в зависимости от знака равенства!