Микроконтролери и електроника
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 ]
Заглавие: 

setoy написа:
int *byte; // обяваваш указател към int, който си нарекъл byte(име на променлива)
byte = &dataPacket; //присвояваш му адреса на dataPacket

Но... колко байта е размера на int типа, това зависи от платформата.

Правилно е

byte * BytePtr;

bytePtr = (byte*)&dataPacket;

Това каства адреса на dataPacket към байтов указател. Важно е да се знае към какъв тип данни показва пойнтера.


Ами то най-вероятно вътре във самата функция на която редава данните е точно така, но той е дал само аргумента който подава на функцията. Инче онзи ден се опитваха да ме убедят че 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 и т.н. Това дава шанс на четеца да не му е се у гъзеца га чете сорсове за различни платформи :D char ползвам само когато там ще съхранявам character, ако ще е обикновено число отива в графата int8/uint8.

Тълкуването е просто: вземи стойността от адреса на dataPacket и я конвертирай до дължина един байт. Обаче такова тълкуване не е много коректно, по скоро би трябвало да е вземи стойността на байта от адреса на dataPacket.

perro_iv, а как ще изглежда обратното, т.е. запиши стойност от един байт дължина на адреса на dataPacket :) ?

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/