кастинг между sockaddr и sockaddr_in

Я наткнулся на учебник по программированию сокетов, в котором он цитируется

"указатель на struct sockaddr_in может быть приведен к указателю на struct sockaddrи наоборот"

Я не понимаю, как sockaddr_in может быть приведен к sockaddr. Приведение указателябольшой введите вМаленький Тип должен давать поведение UD.

struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};


struct sockaddr_in {
short int sin_family; // Address family, AF_INET
unsigned short int sin_port; // Port number
struct in_addr sin_addr; // Internet address
unsigned char sin_zero[8]; // Same size as struct sockaddr
};

Как актерский состав не может быть неопределенным? Разве небезопасно бросать их друг другу?

Если у меня есть класс A, имеющий только два целых, и класс B, имеющий четыре целых. И если у меня есть указатель типа B, и я приведу его к типу A, тогда я уверен, что смогу получить первые два элемента. Но если класс A имеет 2 символа, объявленных первыми, и 2 объекта, объявленных позже, то указатели не будут правильно извлекать значения, поскольку расположение объектов в этом случае будет другим.

Изменить 1:

class Anu
{
public:
    char a;
    int b;
    Anu()
    {
        a='a';
    }
};
class Anurag
{
public:
    Anurag() { a=4;}
    int a;
    int b;
    int c;
    int d;
};
int main()
{
        Anu objanu;
        Anurag objanurag;
        Anurag *ptrAnurag= &objanurag;
        ptrAnurag= (Anurag*)&objanu;
        cout<<ptrAnurag->a; //Some weird value here
        return 0;
}

Предполагая, что я изменил пример, чтобы оба класса имели одинаковый размер путем настройки типов переменных ... все же расположение объектов может отличаться, даже если размер остается неизменным.

Ответы на вопрос(3)

Ваш ответ на вопрос