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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2010, 11:29   #1
Catharsis
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 12
По умолчанию Проблема с инициализацией массива

Объясните, плз, почему ячейки перезатирают друг друга? (введенный ряд не сохраняется):
Код:
#include <iostream>
using namespace std;

int main()
{
int S[3][1];
S [0][0]=1;
S [0][1]=2;
S[1][0]=3;
S[1][1]=4;
S[2][0]=5;
S[2][1]=6;
S [3][0]=7;
S[3][1]=8;
printf("0,0 = %i\n0,1 = %i \n\n",S[0][0],S[0][1]);
printf("1,0 = %i\n1,1 = %i \n\n",S[1][0],S[1][1]);
printf("2,0 = %i\n2,1 = %i \n\n",S[2][0],S[2][1]);
printf("3,0 = %i\n3,1 = %i \n\n",S[3][0],S[3][1]);
system("pause");
}

(выдает: 1 3 3 5 5 7 7 8 )
А также, почему не получается задать массив так?:

Код:
int S[3][1]={1,2,3,4,5,6,7,8};

ошибка: 
too many initializers for `int[3][1]'
И в чем ошибка тут?:

Код:
int S[1][1];
S[1][1]={1,2,3,4};

ошибка:
expected primary-expression before '{' token 
expected `;' before '{' token

Последний раз редактировалось Catharsis; 21.05.2010 в 12:19.
Catharsis вне форума Ответить с цитированием
Старый 21.05.2010, 11:49   #2
Ol'ga_new
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 125
По умолчанию

Зачем объявлять двумерный массив, если нужен ряд цифр?
Ol'ga_new вне форума Ответить с цитированием
Старый 21.05.2010, 12:10   #3
Catharsis
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 12
По умолчанию

а почему не работает то, что должно работать - не интересно? *))

спс, но если бы я не знал какой размерности лучше подобрать массив - я бы так и спросил
Catharsis вне форума Ответить с цитированием
Старый 21.05.2010, 12:35   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Выглядит это действительно странно )
Могу предположить, что вы хотели выделить массив размерности 4 на 2, но тогда так и надо писать.
Вы же выделили матрицу размерности 3 на 1. Перезаписывается, потому что вот такие матрицы представлены в виде линейного массива, то есть S[0][1] и S[1][0] в вашем случае указывают на одну и ту же ячейку.
Видимо, чтобы работало "правильно", нужно изменить описание матрицы на
Код:
int S[4][2];
netrino вне форума Ответить с цитированием
Старый 21.05.2010, 13:13   #5
Catharsis
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 12
По умолчанию

погодите) а как же быть с тем, что в С++ массивы начинаются т.с. с "0-го" элемента, т.е. матрица [3][1] это фактически и есть массив 4х2 ?)
Catharsis вне форума Ответить с цитированием
Старый 21.05.2010, 13:13   #6
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Все правильно
Код:
int S[3][1];
Вы объявили массив на 3 элемента (3 умножить на 1), а пытаетесь записать в него 8, отсюда все ошибки
З.Ы. Это индексация массива начинается с 0, а когда вы объявляете массив, вы указываете размерность массива. Двумерный массив по сути является одномерным, каждый элемент которого - одномерный массив. В данном случаи вы объявили массив из 3 элементов, каждым элементом которого является 1 элемент. т.е. всего получается 3 элемента
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария

Последний раз редактировалось Blade; 21.05.2010 в 13:17.
Blade вне форума Ответить с цитированием
Старый 21.05.2010, 13:25   #7
Catharsis
Пользователь
 
Регистрация: 03.05.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
Это индексация массива начинается с 0, а когда вы объявляете массив, вы указываете размерность массива
Спасибо, теперь понятно)
Catharsis вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прблема с инициализацией буфера серг Общие вопросы C/C++ 4 18.02.2010 19:22
проблема с выводом элемента из массива kirosin JavaScript, Ajax 4 15.01.2010 23:35
Проблемы с инициализацией com компонента Anekdot Общие вопросы Delphi 4 12.08.2009 14:58
проблема создания массива объектов Meduzza Общие вопросы C/C++ 3 28.05.2009 05:07
проблемы с инициализацией графики Teksa Паскаль, Turbo Pascal, PascalABC.NET 4 06.10.2008 18:03