Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Передача Структуры по указателю


Автор: sbtr 27.8.2007, 13:58
Например прототип функции bind(int sockd, struct sockaddr *my_addr, int addrlen); а ей в качестве второго параметра передают структуру sockaddr_in
Код

 struct sockaddr {
        ushort  sa_family;
        char    sa_data[14];
};

 struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};

sockaddr_in addr;
bind(...,(sockaddr *) &addr,...);


Получается bind (); после преобразования считает что ей передали структуру sockaddr ?

Что  тут нетак ?


Код

#include <stdio.h>

struct first_s {
    int a;
    int b;
};

struct second_s{
    int a;
    int b;
} TEST;
    

void printStruct (struct second_s* values){
    printf("%d", values->a);
}
    
int main (){
    struct first_s  values = {1,2};
    printStruct ((TEST*) values);
return 0;
}

error C2059: syntax error : ')'


Подскажите пожалуйста  smile 


Автор: FiMa1 27.8.2007, 14:06
Создал два новых типа - first_s и second_s, printStruct принимает адрес переменной типа second_s, а то что ты ей передаешь не поддается разумному объяснению...
Наверное, ты что-то вроде этого хотел..?
Код
#include <stdio.h>

struct first_s {
    int a;
    int b;
};

struct second_s{
    int a;
    int b;
} TEST;
    

void printStruct (struct second_s* values){
    printf("%d", values->a);
}
    
int main (){
    struct first_s  values = {1,2};
    printStruct ((second_s*)&values);
return 0;
}

Запись
Код
struct second_s{
    int a;
    int b;
} TEST;

Гласит "Создать новый тип с именем second_s у которого два поля - целочисленные переменные a, b и создать переменную только что созданного типа second_s с именем TEST".

Автор: Fazil6 27.8.2007, 15:58
Цитата(sbtr @  27.8.2007,  13:58 Найти цитируемый пост)
Что  тут нетак ?

ты хоть сам понял чего написал?

вопервых
Код

sockaddr_in addr;
bind(...,(sockaddr *) &addr,...);  // как это должно работать внутри функции?

вовторых
Код

    struct first_s  values = {1,2};
    printStruct ((TEST*) values);

TEST - это не тип. если уж приводить то к second_s, 

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)