here is the code
struct point_tag {
int x;
int y;
};
typedef struct point_tag Point;
int main(void)
{
Point pt[] = { {10,20}, {30, 40}, {50,60}};
pt[0] = {100,200};
}
Когда я сделать pt[0] = {100, 200}
, компилятор продолжает жаловаться наПочему этот массив присваивания структуры не компилируется?
error:expected expression before '{' token
Я не реально получить, что, хотя. Не выражение перед оператором присваивания {токен (=)?
Я не понимаю, почему назначение было бы проблемой. значение в адресе pt относится к массиву Point. Я просто устанавливаю 0-й пункт в качестве новой точки, и я знаю, что назначение структуры в формате, например {100,200}
, является законным, если элементы внутри этого массива являются просто полями.
Есть ли причина, по которой вам не нужно это делать для {10,20}, {30,40} и {50,60}? Это меня подводит. Технически вы по-прежнему присваиваете эти значения значению по этим индексам в массиве – committedandroider
Поскольку вышеуказанная конструкция доступна только для инициализации. В 'pt [0] = (Point) {100,200};' вы создаете временную «точку» и присваиваете ее «pt [0]». Вы должны сообщить компилятору, является ли '{100, 200}' '' Point' или 'int [2]' или что-то еще. –
, но не может ли это быть подобной логикой в том, что вы также создаете точку Temp {10,20} и сохраняете это как значение первого индекса в массиве? – committedandroider