Keep in mind that we are dealing with memory, so it content (inside the memory pc slots) isn’t that “useful”. The thing that is most valuable, it is the memory itself. So, byte per byte.

Variable Casting

To cast a variable it is to say to the complier in which way it is going to ready/interpret the content. In some functions like (memset, memmove, memcpy) on the prototype it is sign with void * in order to be filled with any variable possible inside the function, but besides it, the output must “have” all byte’s inside the void * . And there is it when casting become useful, whenever we use a casting:

 void *something;
 unsigned char *len;
 
 len = (unsigned char *)something;

*Something can be filled with anything, but im saying to the complier that:

“i want to read and see anything inside of *something like it is a unsigned char *”

So it wil do like the ‘N’ bytes that char ocuppies, char does have one byte. And like this, it will read one byte by one byte.

Variable Const

A variable set with the prefix const it means for the complier that this variable cannot (ever) be changed.

When set in a prototype of a function, it become a promisse, that this function ‘X’, will read the content of whatever argument has been passed to it parameter, but will never change it content.

Overlap

A overlap it is when a memory is sett above another memory, causing an overlap. Two different pointers can point to the same memory slot. And thats very useful on C, but it can cause some troubles when doing pointers arithmetics (doing operations/comparisons with pointers).

If i want to copy something on the place that the ptr1 points, with *ptr1 = <&something> but somewhere else, the prt2 points to the same place…. with *ptr2 = <&something> , it will get a lot of confusing on the expected output. And that is, what it is called of, so: overlap of memory.