| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Индексиранена масиви от указатели към стрингове във функция http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=2967 |
Страница 1 от 1 |
| Автор: | asp [ Чет Сеп 28, 2006 2:09 pm ] |
| Заглавие: | Индексиранена масиви от указатели към стрингове във функция |
Здравейте, имам С проблем. Значи имам масиви от указатели към стрингове. code volatile char *Mstart[4]= { " ааа ", " ббб ", " ццц ", "SW ver. test c2005 " }; code volatile char *Mselect[8]= { " ааа ", " ббб ", " ццц ", " ддд ", " ABOUT ", " FREE ", " FREE ", " FREE " }; Искам да индексирам масива във функция и така да подавам указателя на драйвера за дисплея. С това което ползвам не става защото индексирам char. for( i=0;i<4;i++) //display strings { GotoYX( (i+1),(minfo->cursor+1) ); // дисплеят е 4 редов p =((minfo->p) +( (minfo->Displ<<2) + i )) ; ZobrazString( p ); } minfo->p сочи първият символ от масива т.е. за Mstart[4] сочи указателят записан в Mstart[0]. minfo->p е char указател i +( (minfo->Displ<<2) индексират но индексират байт по байт а аз искам да ида на следващия указател за да изобразя следващият ред. В момента на 4 те реда на дисплея се изобразява само 1 стринг като всеки следващ ред започва с 1 символ по малко / по навътре /. Пример: ааа аа а Ако някои успее да схване / не знам добре ли го обяснявам/ кво ме тормози да се изкаже. |
|
| Автор: | the_real_maniac [ Чет Сеп 28, 2006 2:30 pm ] |
| Заглавие: | |
Ммм защо не дадеш и дефинирането на самият масив ? А иначе на бързо само може да си изпуснал/забравил/не знаеш, че когато индексираш масив посредством указател, т.е char array[10][3]; char *p; p = array; Индексирането чрез p става чрез умножаване N-ти елемент , дължина/големина на елемент ... Но в твоят случей виждам , че имаш различни дължини , а не ползваш МАХ винаги , та ще трябва може би и едно strlen преди това или константи , ако знаеш какви точно са ти стринговете и прочие едит: еййй - да, никола е прав. Така е опита си е опит и като не ползваш нещо го забравяш ( леко ) |
|
| Автор: | Nikola Kirov [ Чет Сеп 28, 2006 2:31 pm ] |
| Заглавие: | |
Прави се с указател към указател char ** pp = &Mstart[0]; след което *pp ти е указател към първия елемент на Mstart след p++ *pp ще е указател към втория елемент на Mstart Надявам се да ти станало ясно как става а за твоята реализация няма как да извадиш следващия стринг от minfo->p след като ти е укзаател към char. |
|
| Автор: | Реконструктор [ Чет Сеп 28, 2006 3:43 pm ] |
| Заглавие: | |
code volatile char Mstart[4][20]= { " ааа ", " ббб ", " ццц ", "SW ver. test c2005 " }; от тук нататък Mstart[n] сочи конкретния стринг |
|
| Автор: | asp [ Чет Сеп 28, 2006 5:16 pm ] |
| Заглавие: | |
Никола бравус ти си моя човек насочи ме с метода и след половин час копане хавата стана така: char **p; e дефинирано в minfo; char *p във функцията; for( i=0;i<4;i++) //display strings { GotoYX((i+1),(minfo->cursor+1)); p =*((minfo->p) + ((minfo->Displ<<2)+i) ) ; // или казано по общо p=*pp ZobrazString( p ); }; Всичко е чудесно. Имаш голямо мерси от мен. Нямаше да се сетя за този двоен указател щото се занимавам с 100 работи и съм не100%ов във всичките. Колкото до подхода на Рек точно него променям с този с указателите струва ми се пое елегантен а и нямам умножение по броя на символите които трябва да знам колко са и т.н. Иначе си бачкаше така но сега го ъпдейтвам. Благодаря на всички за съветите. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|