Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2010, 12:58   #1
Катарсис
 
Регистрация: 03.05.2010
Сообщений: 5
По умолчанию Вопрос от чайника

Подскажите, плз что делаю не так?

Цитата:
#include <iostream>
using namespace std;

int main()
{
int A[2][2]={(11,12),(14,15)};
cout << A[1][1]<< " "<< A[1][2]<<" \n";
system("pause");
}
вместо заданных значений левые выдает
Катарсис вне форума Ответить с цитированием
Старый 03.05.2010, 13:06   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

15 и магическое число ? Выдает, если так, то все верно.
BOBAH13 вне форума Ответить с цитированием
Старый 03.05.2010, 13:13   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
A[1][2]
Массив в Си начинается с нуля, ста ло быть
Код:
cout << A[0][0]<< " "<< A[0][1]<<" \n";
Даст 11 и 12
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.05.2010, 13:49   #4
Катарсис
 
Регистрация: 03.05.2010
Сообщений: 5
По умолчанию

Stilet
Спасибо, за адекватный отклик.
Цитата:
cout << A[0][0]<< " "<< A[0][1]<<" \n";
12 и 15 выдало, не 11 и 12 (компилер Dev-C++, если важно). но это наверно просто в строках\столбцах дело

но почему при
Цитата:
cout << A[0][0]<< " "<< A[1][0]<<" \n";
выдает 12 и 0?

ЗЫ
С началом массивов понял. Вопрос походу: можно ли как-то привести в более удобную форму номерацию ячеек, чтобы быстрее соотносить их с размерерностью массива. что-то вроде, например, при A [2] чтоб можно было номеровать A [1--] A [2--], A [3--] ?) (я понимаю, что как я написал - так нельзя, но может есть что-то подобное)

Последний раз редактировалось Катарсис; 03.05.2010 в 13:54.
Катарсис вне форума Ответить с цитированием
Старый 03.05.2010, 16:15   #5
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Цитата:
но почему при
...
выдает 12 и 0?
...
Что запросили, то и получили, никакой магии.
Цитата:
Вопрос походу: можно ли как-то привести в более удобную форму номерацию ячеек
Привычно != удобно, привыкайте к такому и извращаться тут не нужно.
Код:
for( int i = 0; i < ARRAY_LENGTH; ++i )
  array[ i ] ...;
Вполне удобно всё перебирается.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 03.05.2010, 16:53   #6
Катарсис
 
Регистрация: 03.05.2010
Сообщений: 5
По умолчанию

код
Цитата:
#include <iostream>
using namespace std;

int main()
{
int A[2][2]={(11,12),(14,15)};
cout << A[0][0]<< " " << A[0][1]<<" \n";
cout << A[1][1]<< " " << A[1][2]<<" \n";

system("pause");
}
выдает:
12 15
0 21

кто объяснит, откуда берутся числа 2-й пары?
Катарсис вне форума Ответить с цитированием
Старый 03.05.2010, 16:56   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
компилер Dev-C++, если важно
Нет, просто я никогда не сталкивался в Си с инициализацией массива, вот и ошибся в рассчетах.
Цитата:
кто объяснит, откуда берутся числа 2-й пары?
Ты что читаешь невнимательно? Я же тебе сказал что массивы в Си начинаются с нуля. потому A[1][2] на самом деле "по паскалевски" (Если ты его изучал) выглядят как А[2,3], а это выход за пределы массива, просто Си не ругается на такие финты, полагаясь на здравый смысл программиста.
I'm learning to live...

Последний раз редактировалось Stilet; 03.05.2010 в 16:58.
Stilet вне форума Ответить с цитированием
Старый 03.05.2010, 17:30   #8
Катарсис
 
Регистрация: 03.05.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Нет, просто я никогда не сталкивался в Си с инициализацией массива, вот и ошибся в рассчетах.

Ты что читаешь невнимательно? Я же тебе сказал что массивы в Си начинаются с нуля. потому A[1][2] на самом деле "по паскалевски" (Если ты его изучал) выглядят как А[2,3], а это выход за пределы массива, просто Си не ругается на такие финты, полагаясь на здравый смысл программиста.
Ну, ты тоже невнимательно читаешь, иначе бы заметил, что содержимое ячейки А[1][1] должно было быть адекватным, а не 0.
Подправил строку на
Цитата:
cout << A[1][0]<< " " << A[1][1]<<" \n";
дает: 0 и 0 ...

Последний раз редактировалось Катарсис; 03.05.2010 в 17:33.
Катарсис вне форума Ответить с цитированием
Старый 03.05.2010, 17:39   #9
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
int A[2][2]={(11,12),(14,15)};
Так неправильно. Правильно так:
Код:
int A[2][2]={{11,12},{14,15}};
А произошло это у вас потому, что (11, 12) означает результат выражения "11, 12". А этот результат есть результат действия оператора "запятая" с двумя аргументами - 11 и 12. Результатом этого оператора является последнее выражение в операторе, т.е. 12. Поэтому {(11, 12), (14, 15)} есть {12, 15} (вообще только одна строчка двумерного массива). А уж как остальные (вторая) строчки будут - мне неизвестно.

P.S. Кстати, для оформления кода используйте не тэг QUOTE, а тег CODE (слева от QUOTE - значок #)
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же

Последний раз редактировалось Гром; 03.05.2010 в 17:45.
Гром вне форума Ответить с цитированием
Старый 03.05.2010, 17:43   #10
confucius
Пользователь
 
Аватар для confucius
 
Регистрация: 01.05.2010
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Код:
int A[2][2]={(11,12),(14,15)};
Так неправильно. Правильно так:
Код:
int A[2][2]={{11,12},{14,15}};
тут работает оператор (,) запятая, возвращая в первом случае 12, во втором 15, остальные 2 элемента будут проинициализированы по умолчанию.
confucius вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Sql для чайника) RSmile БД в Delphi 2 04.05.2010 04:29
Как разбить процедуру (ту лардж)? Вопрос от чайника ... neprofi Microsoft Office Word 21 28.04.2010 17:25
Вопрос по excel от чайника rjavaya Microsoft Office Excel 5 08.07.2009 16:46
Вопрос чайника по фромам rh- Microsoft Office Access 1 10.11.2008 04:43