Софтуерно Инженерство
Loading...
i12805 avatar i12805 3 Точки

Task 2.5 SerializeMain

Здравейте,

В следния фрагмент от SerializeMain.цпп се извеждат на екрана поредицата байтове, които следва да върне нашата програма:

size_t bytesWritten;
byte* memory = serializeToMemory(input.str(), bytesWritten);
for (byte* b = memory; b < memory + bytesWritten; b++) {
    std::cout << (int)(*b) << " ";
}

Защо, въпреки че масивът е от тип байт, при извеждането се каства на инт?

поздрав!

Тагове:
0
C++ Advanced
galin_kostadinov avatar galin_kostadinov 163 Точки

Привет!

http://www.cplusplus.com/forum/beginner/121180/

https://en.cppreference.com/w/cpp/types/byte

Кастваш го към int за да вземеш числовата стойност иначе ще ти го принтира като символ.

Искам да допълня още, че има ралика между  (int)(*b) и  (int)(b) - в първия случай си деференцирал даден пойнтър, т.е. взел си стойността към която сочи този пойтър byte *b и след това, тази стойност я кастваш към друг тип в случая int, тъй като byte е по малък и съвместим тип се записва напълно в int, прави се временна променлива  от тип (int)(*b) и се печата на конзолата. Във втория случай говорим за кастване на пойнтър, за което споменава  Filipbg. Тука вече особено този тип кастване  C-Style не се препоръчва.

Всеки пойтър пази адрес, едно число 8byte(или 4byte при 32 битова архитектура), на който започва съответния тип данни(може да са int, char, strint, Person...), но какъв тип са тези данни ти го дава именно типа пойтър дали ще е int *b, char* b, string* b... Това е важно при дереферeнциране на сами пойтър за да ти върне именно стойността на този тип данни, които се пазят на този адрес. Ако чрез неправилно кастване, което си е минало успешно и дереференцираш дадената памет поведението е не дефенирано(от връщане на грешен резултат до прекъсване на програмата поради достъпване на чужда памет, която се намира извън дадената програма).

Поздрави!

1
10/12/2019 16:07:22
i12805 avatar i12805 3 Точки

" Кастваш го към int за да вземеш числовата стойност иначе ще ти го принтира като символ. "

Благодаря.

0