2013-12-18 4 views
0

Я пишу программу Win32. и я встречаю проблему. Я определяю массив Point, так же, как это:Как инициализировать массив точек?

POINT points[3]; 

и теперь я хочу, чтобы инициализировать его, и я знаю, что это незаконно

POINT points[3] = { (295,295),(200,200),(400,500) }; 

так мне нужен правильный путь.

+3

попробуйте точки POINT [3] = {{295,295}, {200,200}, {400,500}}; – Matt

+2

Вам действительно не нужно 3. Просто дайте компьютеру подсчет для вас. – cup

+0

спасибо, ваш путь правильный. @Matt – user3116182

ответ

2

Вы можете сделать это просто как

POINT points[3] = { 295, 295, 200, 200, 400, 500 }; 

но более безопасным, что нужно сделать бы это

POINT points[3] = { { 295, 295 }, { 200, 200 }, { 400, 500 } }; 

Забавная часть что то, что вы изначально писали, не является незаконным (откуда вы взяли эту идею?). (), который вы использовали внутри вашего инициализатора, приведет к тому, что внутренний , будет интерпретироваться как оператор запятой. Например, выражение (400, 500) оценивает значение 500. Это означает, что исходный инициализатор фактически рассматривается как

POINT points[3] = { 295, 200, 500 }; 

, который в свою очередь, эквивалентно

POINT points[3] = { { 295, 200 }, { 500, 0 }, { 0, 0 } }; 

Она не делает то, что вы хотите, чтобы это сделать, но это, конечно, не является незаконным.

+0

хороший ответ. Мне жаль, что мое выражение не строгое. – user3116182

+0

Можете ли вы рассказать больше о внутреннем операторе запятой, таком как его исходный код. @AndreyT – user3116182

+0

@ user3116182: Оператор Comma в вашем исходном кодовом коде является встроенным оператором, частью основного языка C++. У него нет «исходного кода». В Сети есть много информации об этом (http://en.wikipedia.org/wiki/Comma_operator). – AnT

0

В соответствии с комментариями:

POINT points[] = {{295,295}, {200,200}, {400,500}}; 
Смежные вопросы