| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Малко помощ със синтаксис на C ! http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=6526 |
Страница 1 от 1 |
| Автор: | perro_iv [ Пет Фев 06, 2009 11:57 am ] |
| Заглавие: | Малко помощ със синтаксис на C ! |
(byte*)&dataPacket Може ли някой да ми разтълкува този израз, в смисъл нещо не ми е ясен синтаксиса все още. Този израз е подаден като параметър на една ф-я. |
|
| Автор: | ToHu [ Пет Фев 06, 2009 12:13 pm ] |
| Заглавие: | |
ами & ти е поинтер, т.е. ако имаш променлива, да речем temp=23 на адрес 0х23F, х=&temp ще направи x=0x23F. (byte*) е кастване, т.е. по този начин на функцията с епредава поинтера към dataPacket което предполагам е масив. |
|
| Автор: | perro_iv [ Пет Фев 06, 2009 1:08 pm ] |
| Заглавие: | |
Благодаря много! Това с пойнтера ми беше ясно, но кастването не, по този начин. Това анлогично ли е на: int *byte; byte = &dataPacket; |
|
| Автор: | setoy [ Пет Фев 06, 2009 3:51 pm ] |
| Заглавие: | |
int *byte; // обяваваш указател към int, който си нарекъл byte(име на променлива) byte = &dataPacket; //присвояваш му адреса на dataPacket Но... колко байта е размера на int типа, това зависи от платформата. Правилно е byte * BytePtr; bytePtr = (byte*)&dataPacket; Това каства адреса на dataPacket към байтов указател. Важно е да се знае към какъв тип данни показва пойнтера. |
|
| Автор: | ToHu [ Пет Фев 06, 2009 4:07 pm ] | |||||||||
| Заглавие: | ||||||||||
Ами то най-вероятно вътре във самата функция на която редава данните е точно така, но той е дал само аргумента който подава на функцията. Инче онзи ден се опитваха да ме убедят че int винаги е 4 байта, реферирайки линкове в google и наистина в тия линкове не видях някъде да пише че някои от тези "стандартни" типове не са никак стандартни а са платформено зависими, и точно така твърдо бе описана и word. Имам чуство че и тия които пишат книги отдавна са забравили че С не е по никакъв начин вързан с х86 32 битови процесори. Интересно на MS студиото дали като си на 64 битова платформа със 64 битово ядро приема int като 64 битов ..... |
||||||||||
| Автор: | ¶ [ Пет Фев 06, 2009 6:18 pm ] |
| Заглавие: | |
По повод дължината на integer, имам от няколко години практиката вместо int, short int, long int, да използвам един header файл, в който чрез typedef съм дефинирал int8, int16, int32, uint8, uint16, uint32 и т.н. Това дава шанс на четеца да не му е се у гъзеца га чете сорсове за различни платформи Тълкуването е просто: вземи стойността от адреса на dataPacket и я конвертирай до дължина един байт. Обаче такова тълкуване не е много коректно, по скоро би трябвало да е вземи стойността на байта от адреса на dataPacket. perro_iv, а как ще изглежда обратното, т.е. запиши стойност от един байт дължина на адреса на dataPacket |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|