реклама на сайте
подробности

 
 
> Двумерный массив и указатель на него, Как объявить чтобы можно было обращаться massiv[x][y]?
mempfis_
сообщение Jun 9 2009, 12:23
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Добрый день.

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

Есть такой массив:
Код
[b]unsigned int [/b] [i]__flash[/i] Program1[5][4] =
{
  {0,0,0,0},
  {1,1,1,1},
  {2,2,2,2},
  {3,3,3,3},
  {4,4,4,4}
}


И есть некая структура управления в которой хочу создать указатель на этот двумерный массив:
Код
typedef struct
{
unsigned int __flash **program;//указатель на текущую исполняемую программу
} stProgram;

stProgram Program; //экземпляр структуры


Стоит задача сделать так чтобы используя указатель Program.program обращаться к двумерному массиву
наиболее понятным образом Program.program[0][1] (без использования * и всяких смещений)

Определил функцию инициализации масива
Код
void SetProgram(unsigned int __flash **program_addr)
{
   Program.program = program_addr;
}



Компилятор ругается на вызов этой функции:
Код
SetProgram(&Program1[0][0]);


Цитата
Error[Pe167]: argument of type "unsigned int __flash (*)[4]" is incompatible with parameter of type "unsigned int __flash **"
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Goodefine
сообщение Jun 9 2009, 14:34
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(zltigo @ Jun 9 2009, 17:23) *
Глупости. Вы пишите, что попало и получаете какие попало ошибки.
Код
typedef struct {
int dm[8][8];
} dm_t;

Ой! Рассажите об этом Ритчи....

А теперь добавьте волшебное слово __flash
Код
typedef struct {
int  __flash dm[8][8];
} dm_t;

и Ритчи расскажет Вам:
Цитата
Error: ... storage modifier not allowed in this context


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 9 2009, 14:39
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Goodefine @ Jun 9 2009, 17:34) *
и Ричи скажет вам:

Ну-ка двайте сюда место, где про __flash у Ритчи говорится smile.gif. А заодно расскажите как там Страутструп разруливает эту проблему smile.gif smile.gif. Ну а лучше почитайте документацию на компилятор, как и для чего __flash пользоваться.
Код
typedef __flash struct {
int dm[8][8];
} dm_t;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 9 2009, 15:59
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Вопрошающему: посторайтесь понять это и Вы найдёте ответ на свой вопрос...
Код
int *pointers[10]    - это массив указателей
int (*pointer)[10] - это переменная типа указатель на массив из десяти интов
double (*sum(double,double))[3] - функция sum возвращает указатель на массив из 3 даблов


to defunct: первые два совершенно разные типы. Вот пример их использования:
Код
pointers[0] = NULL;
*pointer[0] = 10;


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 9 2009, 18:32
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(demiurg_spb @ Jun 9 2009, 18:59) *
to defunct: первые два совершенно разные типы. Вот пример их использования:
Код
pointers[0] = NULL;
*pointer[0] = 10;

Да как говорится что-то в глаз попало написал фигню, которую сразу же и удалил. (у Вас быстрая реакция smile.gif )
Конечно же это абсолютно два разных типа.

Пример использования правда не очень очевиден, т.к. нам ничто не мешает сделать:
*pointers[ 0 ] = 10;
*pointer[ 0 ] = 10;

Вот так будет более наглядно -

sizeof ( pointers ) != sizeof( pointer )
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 9 2009, 19:31
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(defunct @ Jun 9 2009, 22:32) *
нам ничто не мешает сделать:
*pointers[ 0 ] = 10;
*pointer[ 0 ] = 10;
Да, но смысл уже будет другой. Я привёл пример доступа к элементу массива с индексом 0 в обоих случаях.
А пример с sizeof тоже весьма показателен.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- mempfis_   Двумерный массив и указатель на него   Jun 9 2009, 12:23
- - 777777   Цитата(mempfis_ @ Jun 9 2009, 16:23) unsi...   Jun 9 2009, 12:33
- - zltigo   Цитата(mempfis_ @ Jun 9 2009, 15:23) Чтот...   Jun 9 2009, 12:43
|- - mempfis_   Хорошо предположим я объявлю функцию с указателем ...   Jun 9 2009, 12:56
|- - MrYuran   Цитата(mempfis_ @ Jun 9 2009, 16:56) Как ...   Jun 9 2009, 13:03
|- - mempfis_   ЦитатаТак прямо так и обращаться. Program.program[...   Jun 9 2009, 13:23
|- - zltigo   Цитата(mempfis_ @ Jun 9 2009, 16:23) комп...   Jun 9 2009, 13:27
|- - defunct   Цитата(mempfis_ @ Jun 9 2009, 16:23) Так ...   Jun 9 2009, 14:29
- - Goodefine   А чего бы в таком виде не сделать: Кодvalue_from_a...   Jun 9 2009, 13:35
|- - mempfis_   Цитата(Goodefine @ Jun 9 2009, 16:35) А ч...   Jun 9 2009, 13:46
|- - zltigo   Цитата(mempfis_ @ Jun 9 2009, 16:46) К со...   Jun 9 2009, 14:23
- - Goodefine   Цитата(mempfis_ @ Jun 9 2009, 16:46) да и...   Jun 9 2009, 13:50
|- - mempfis_   КодВы сможете на плюсах. В обычном Си компиляторе ...   Jun 9 2009, 13:58
|- - defunct   Цитата(demiurg_spb @ Jun 9 2009, 22:31) Д...   Jun 9 2009, 21:23
- - Goodefine   Я к тому, что решение проблемы автора при обращен...   Jun 9 2009, 14:42
|- - zltigo   Цитата(Goodefine @ Jun 9 2009, 17:42) Я ...   Jun 9 2009, 14:58
- - sergeeff   Уважаемый коллега zltigo привел пример не совсем т...   Jun 9 2009, 16:19
|- - demiurg_spb   Простите, но зачем городить структуру? Автор спраш...   Jun 9 2009, 16:31
||- - Dog Pawlowa   Цитата(demiurg_spb @ Jun 9 2009, 19:31) А...   Jun 9 2009, 16:58
|||- - demiurg_spb   Цитата(Dog Pawlowa @ Jun 9 2009, 20:58) ....   Jun 9 2009, 18:09
||- - zltigo   Цитата(demiurg_spb @ Jun 9 2009, 19:31) П...   Jun 9 2009, 17:26
|- - mempfis_   name=' date='Jun 9 2009, 19:19' post=...   Jun 10 2009, 08:36
|- - zltigo   Цитата(mempfis_ @ Jun 10 2009, 11:36) Пер...   Jun 10 2009, 09:16
|- - Dog Pawlowa   Цитата(mempfis_ @ Jun 10 2009, 11:36) Но ...   Jun 10 2009, 09:19
|- - ReAl   Цитата(mempfis_ @ Jun 10 2009, 11:36) Во-...   Jun 10 2009, 10:23
|- - Wano   ЫЫЫЫЫ чего-то не катит typedef char TypeD[5][5]...   Jun 13 2009, 21:13
|- - AHTOXA   Цитата(Wano @ Jun 14 2009, 03:13) ЫЫЫЫЫ ч...   Jun 13 2009, 21:21
|- - ReAl   RE: Двумерный массив и указатель на него   Jun 13 2009, 23:07
||- - Wano   Кодvoid func( unsigned size_y, unsigned size_x...   Jun 13 2009, 23:44
|- - XVR   Цитата(Wano @ Jun 14 2009, 01:13) ЫЫЫЫЫ ч...   Jun 15 2009, 09:18
|- - sergeeff   Цитата(XVR @ Jun 15 2009, 12:18) Мдя. Вы ...   Jun 15 2009, 09:24
|- - AHTOXA   Цитата(sergeeff @ Jun 15 2009, 15:24) Зат...   Jun 15 2009, 09:54
- - XVR   Открою великую тайну - как сделать из массива (л...   Jun 10 2009, 09:34
|- - defunct   Цитата(XVR @ Jun 10 2009, 12:34) Открою в...   Jun 14 2009, 03:07
|- - Wano   не рычите люди. С тем, что через void* можно броси...   Jun 14 2009, 09:16
|- - Dog Pawlowa   Цитата(Wano @ Jun 14 2009, 12:16) ...Дайт...   Jun 14 2009, 09:39
|- - Wano   Конкретней : получаем в функции указатель: void f...   Jun 14 2009, 10:04
|- - AHTOXA   Цитата(Wano @ Jun 14 2009, 16:04) Вопрос:...   Jun 14 2009, 10:12
||- - sergeeff   Цитата(AHTOXA @ Jun 14 2009, 14:12) Потом...   Jun 14 2009, 10:31
|- - Сергей Борщ   Цитата(Wano @ Jun 14 2009, 13:04) то не п...   Jun 14 2009, 10:16
|- - Wano   Цитата(Сергей Борщ @ Jun 14 2009, 13:16) ...   Jun 14 2009, 10:34
|- - sergeeff   Цитата(Wano @ Jun 14 2009, 14:34) если за...   Jun 14 2009, 10:51
|- - Wano   Цитата(sergeeff @ Jun 14 2009, 13:51) Жут...   Jun 14 2009, 10:56
|- - sergeeff   Цитата(Wano @ Jun 14 2009, 14:56) как пос...   Jun 14 2009, 11:11
|- - Сергей Борщ   Цитата(Wano @ Jun 14 2009, 13:56) как пос...   Jun 14 2009, 11:33
|- - Wano   Ладно шариться по массиву можно хорошо и так: void...   Jun 14 2009, 12:48
|- - ReAl   Цитата(Wano @ Jun 14 2009, 15:48) uint8_t...   Jun 14 2009, 14:20
||- - aaarrr   Цитата(ReAl @ Jun 14 2009, 18:20) По пово...   Jun 14 2009, 16:07
|- - Сергей Борщ   Цитата(Wano @ Jun 14 2009, 15:48) мне хот...   Jun 14 2009, 16:33
- - sergeeff   Да, блин! Все рассказали, объяснили, примеры п...   Jun 14 2009, 00:16
- - sergeeff   Не хочет народ читать книги отцов-основателей. Дл...   Jun 14 2009, 10:08


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 00:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01427 секунд с 7
ELECTRONIX ©2004-2016