Отговори на тема  [ 6 мнения ] 
Малко помощ със синтаксис на C ! 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение Малко помощ със синтаксис на C !
(byte*)&dataPacket

Може ли някой да ми разтълкува този израз, в смисъл нещо не ми е ясен синтаксиса все още.
Този израз е подаден като параметър на една ф-я.


Пет Фев 06, 2009 11:57 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
ами & ти е поинтер, т.е. ако имаш променлива, да речем temp=23 на адрес 0х23F, х=&temp ще направи x=0x23F. (byte*) е кастване, т.е. по този начин на функцията с епредава поинтера към dataPacket което предполагам е масив.


Пет Фев 06, 2009 12:13 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Вто Авг 23, 2005 10:36 am
Мнения: 156
Местоположение: Казанлък
Мнение 
Благодаря много!
Това с пойнтера ми беше ясно, но кастването не, по този начин.
Това анлогично ли е на:
int *byte;
byte = &dataPacket;


Пет Фев 06, 2009 1:08 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
int *byte; // обяваваш указател към int, който си нарекъл byte(име на променлива)
byte = &dataPacket; //присвояваш му адреса на dataPacket

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

Правилно е

byte * BytePtr;

bytePtr = (byte*)&dataPacket;

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


Пет Фев 06, 2009 3:51 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
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 4:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
По повод дължината на integer, имам от няколко години практиката вместо int, short int, long int, да използвам един header файл, в който чрез typedef съм дефинирал int8, int16, int32, uint8, uint16, uint32 и т.н. Това дава шанс на четеца да не му е се у гъзеца га чете сорсове за различни платформи :D char ползвам само когато там ще съхранявам character, ако ще е обикновено число отива в графата int8/uint8.

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

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

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пет Фев 06, 2009 6:18 pm
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни