|
|
 |
Ответов
|
Jul 17 2009, 05:58
|
Местный
  
Группа: Свой
Сообщений: 335
Регистрация: 17-06-04
Из: Москва
Пользователь №: 35

|
А двумерный? На такую строчку Код char ResultADC[ 24 ][ 32 ] = { 0 }; char **ptrResultADC = ResultADC; IAR 5.20 ругается: Цитата Error[Pe144]: a value of type "char (*)[32]" cannot be used to initialize an entity of type "char **" Z:\main.c 27 Вроде запись правильная... нет?
--------------------
Всегда не хватает времени, чтобы выполнить работу как надо, но на то, чтобы ее переделать, время находится. (Закон Мескимена.)
|
|
|
|
|
Jul 17 2009, 07:10
|
Местный
  
Группа: Свой
Сообщений: 335
Регистрация: 17-06-04
Из: Москва
Пользователь №: 35

|
Цитата(Dog Pawlowa @ Jul 17 2009, 10:51)  Массив в реальности остается одномерным, и в нем записаны переменные типа char. Почему у Вас две звезды получилось? понял, получилось из серии "я не волшебник, я только учусь - вот вам стеклянные тапочки" Где-то вроде видел такую запись. Почему-то отложилась как работающая. Двумерные раньше не использовал. По задаче - можно и не использовать. Но хотелось бы потренироваться. Как я понимаю, надо объявить указатель на строки в двумерном массиве. И передавать в функции уже именно указатель на конкретную строку. В любом случае буду благодарен за кусочек или ссылку.
--------------------
Всегда не хватает времени, чтобы выполнить работу как надо, но на то, чтобы ее переделать, время находится. (Закон Мескимена.)
|
|
|
|
|
Jul 17 2009, 08:27
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Panych @ Jul 17 2009, 10:10)  Где-то вроде видел такую запись. Почему-то отложилась как работающая. Двумерные раньше не использовал. Она действительно работает. Только означает она не то, что вы подумали, а "указатель на указатель на char". Поскольку (как отметил Dog Pawlowa) массив фактически в памяти расположен одномерно, то "двумерный" указатель должен содержать (знать на этапе компиляции) одну из размерностей. Цитата(Panych @ Jul 17 2009, 10:10)  Но хотелось бы потренироваться. Как я понимаю, надо объявить указатель на строки в двумерном массиве. И передавать в функции уже именно указатель на конкретную строку. Да, совершенно верно. Код #define LINE_SIZE 10 typedef uint8_t line_t[LINE_SIZE]; // новый тип "строка массива" line_t Array[4]; // массив 10*4
void func1(line_t line) // синтаксически передается строка. { // однако по правилам С массивы передаются не по значению, // а по указателю. Поэтому работаем со строкой как с одномерным массивом. printf(" %d ",line[1]); }
void func2(line_t * line) // явно передаем указатель на строку { printf(" %d ",(*line)[2]); }
void func3(line_t * line) // он же указатель на массив { printf(" %d ",line[3][2]); }
int main() { for(uint8_t y = 0; y < sizeof(Array) / sizeof(Array[0]); ++y) for(uint8_t x = 0; x < sizeof(line_t); ++x) Array[y][x] = x + y * sizeof(line_t); func1(Array[1]); func2(&Array[2]); func3(Array);
return EXIT_SUCCESS; } Чуть позже выложу пример без объявления типа.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 17 2009, 09:33
|
Местный
  
Группа: Свой
Сообщений: 335
Регистрация: 17-06-04
Из: Москва
Пользователь №: 35

|
Цитата(Сергей Борщ @ Jul 17 2009, 12:27)  Чуть позже выложу пример без объявления типа. С примером разобрался вроде, хотя "не чувствую", в чем преимущество объявления типа. По идее, наверное, неплохо бы использовать структуру, ведь есть массив и две координаты в нем. Но, опять же, для каких случаев есть смысл городить это - нет ясности. Нашел много книг в инете, но всё это описано как-то отстраненно, в общем случае.
--------------------
Всегда не хватает времени, чтобы выполнить работу как надо, но на то, чтобы ее переделать, время находится. (Закон Мескимена.)
|
|
|
|
Сообщений в этой теме
Faradey как в IAR объявить массив в памяти кода? Jun 29 2006, 13:49 vet __flash int mas[] = {1,2,3,4}; Jun 29 2006, 14:29 Faradey Цитата(vet @ Jun 29 2006, 17:29) __flash ... Jun 29 2006, 15:39  starter48 Цитата(Faradey @ Jun 29 2006, 21:39) Цита... Jun 29 2006, 17:46 dRaider А если нужно по конкретному адресу можно так
__fl... Jun 29 2006, 15:00 dRaider Если указатель на масив то так
__flash int mas[] ... Jun 29 2006, 17:55 SiberK Цитата(dRaider @ Jun 30 2006, 01:55) Если... Jun 30 2006, 01:21 Faradey Все всем спасибо.
Массив объявляется как __... Jun 30 2006, 07:38 Old1 Цитата(Faradey @ Jun 30 2006, 10:38) Все ... Jun 30 2006, 09:15 _Bill Цитата(Faradey @ Jun 30 2006, 10:38) Все ... Jun 30 2006, 10:28     SasaVitebsk Цитата(Panych @ Jul 17 2009, 12:33) ... в... Jul 21 2009, 10:07      zltigo Цитата(SasaVitebsk @ Jul 21 2009, 13:07) ... Jul 21 2009, 10:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|