powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / доступ к элементам двумерного массива классов через указатель
5 сообщений из 5, страница 1 из 1
доступ к элементам двумерного массива классов через указатель
    #38052491
Violet-n-red
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
был такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
class eat_me
{
	double a,b;
public:
	eat_me(double x,double y)
	{
		a=x;
		b=y;
	}
	void show(){cout<<a<<' '<<b<<endl;}
};


int main()
{
	eat_me bacon[2][3]={eat_me(1,2),eat_me(7,9),eat_me(12,8),eat_me(6,9),eat_me(1,-1),eat_me(1050,-13)};
	for(int i=0;i<2;++i)
	{
		for(int j=0;j<3;++j)
			bacon[i][j].show();
	}
	keep_window_open();
	return 0;
}



есть потребность изменить его так ,чтоб доступ к массиву осуществлялся через указатель.
изменил только мейн:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
class eat_me
{
	double a,b;
public:
	eat_me(double x,double y)
	{
		a=x;
		b=y;
	}
	void show(){cout<<a<<' '<<b<<endl;}
};


int main()
{
	eat_me *ham;
	eat_me bacon[2][3]={eat_me(1,2),eat_me(7,9),eat_me(12,8),eat_me(6,9),eat_me(1,-1),eat_me(1050,-13)};
	ham=bacon;
	for(int i=0;i<2;++i)
	{
		for(int j=0;j<3;++j)
			ham[i][j].show();
	}
	keep_window_open();
	return 0;
}



компилятор ругается на присвоение массива указателю: a value of type "eat_me(*)[3]" cannot be assigned to any entity of type "eat_me*"
как правильно написать присвоение? попробовал несколько разных вариантов - не получается :С возможно, придется менять не только одну строчку.
...
Рейтинг: 0 / 0
доступ к элементам двумерного массива классов через указатель
    #38052570
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
int main()
{
	eat_me *ham;
	eat_me bacon[2][3]={eat_me(1,2),eat_me(7,9),eat_me(12,8),eat_me(6,9),eat_me(1,-1),eat_me(1050,-13)};
	
	for(int i=0;i<2;++i)
	{
		for(int j=0;j<3;++j)
			bacon[i][j].show();
	}

	ham=&bacon[0][0];
	for(int i=0;i<2;++i)
	{
		for(int j=0;j<3;++j)
			(ham+3*i+j)->show();
	}

	return 0;
}
...
Рейтинг: 0 / 0
доступ к элементам двумерного массива классов через указатель
    #38053977
Violet-n-red
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
ham=&bacon[0][0];

- ну это понятно, указатель на самый первый элемент, что бы с него дальше считать.

но есть вопросы:
как это называется и почему оно в скобочках?
Код: plaintext
1.
(ham+3*i+j)

а то учусь по книге и там еще такого не было.
и массив выводится два раза подряд...
...
Рейтинг: 0 / 0
доступ к элементам двумерного массива классов через указатель
    #38054022
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Violet-n-redно есть вопросы:
как это называется и почему оно в скобочках?
Код: plaintext
1.
(ham+3*i+j)

а то учусь по книге и там еще такого не было.Это называется "адресная арифметика".
Означает: Взять адрес ham, добавить к нему смещение (3*i+j)*(размер_типа_на_который_показывает_ham) . Полученный адрес использовать как указатель.

Violet-n-redи массив выводится два раза подряд...Ну так... Там же два цикла. Один использует массив напрямую, другой через указатель. Смотри внимательнее.
...
Рейтинг: 0 / 0
доступ к элементам двумерного массива классов через указатель
    #38054069
Violet-n-red
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ой, да, не заметил.
теперь всё понятно, благодарен за Вашу помощь!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / доступ к элементам двумерного массива классов через указатель
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]