Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2009, 13:20   #1
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию Непонятный синтаксис.

Winsock функция connect.

Вообщем в заголовочном файле объявление выглядит так.
Код:
int PASCAL connect(SOCKET,const struct sockaddr*,int);
На практике это выглядит к примеру так:
Код:
connect(S,(sockaddr*)&SA,sizeof(SA));
Вот это вот что?
Код:
(sockaddr*)&SA
Преобразование что-ли? Какой-то синтаксис непонятный.


P.S.
Эмммм. Создаётся ссылочная переменная и ей присваивается адрес структуры другого типа?

P.P.S.
Неее, нифига.

Последний раз редактировалось jojahti; 14.10.2009 в 13:26.
jojahti вне форума Ответить с цитированием
Старый 14.10.2009, 13:26   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да преобразование ссылки в указатель

я то обычно структуры всетаки через указатели юзаю поэтому не приходится так делать(но тогда я сам их удаляю и создаю)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.10.2009, 14:14   #3
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Ааа!!! Спс. Это же сишные преобразования так выглядят. А я чё-то пропустил это дело, когда книжку читал. Тем более она про с++ и на сишных операциях там внимания не заостряли.

Тоесть походу оно перегружено, поскольку структуры больно разные.
jojahti вне форума Ответить с цитированием
Старый 14.10.2009, 14:20   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Тоесть походу оно перегружено, поскольку структуры больно разные.
Че это структуры разные?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2009, 15:02   #5
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Ну SA у меня типа sockaddr_in;

Если верить заголовочному файлу то.
Код:
struct sockaddr_in {
	short	sin_family;
	u_short	sin_port;
	struct	in_addr sin_addr;
	char	sin_zero[8];
};
А то во что преобразовывается:
Код:
struct sockaddr {
	u_short sa_family;
	char	sa_data[14];
};
Помоему это немного разные структуры.

Каким образом работает сабжевое преобразование? Такая же вумная перегружаемая штучка как статик каст?
jojahti вне форума Ответить с цитированием
Старый 14.10.2009, 15:45   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну разные в описании, но по размеру видать одинаковые.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2009, 16:18   #7
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Чё то не въезжаю.
Что сделала эта строчка?
Код:
(sockaddr*)&SA
Откуда компилятор знает как преобразовывать типы в sockaddr. В заголовоном файле ничего такого не вижу.

Последний раз редактировалось jojahti; 14.10.2009 в 16:36.
jojahti вне форума Ответить с цитированием
Старый 14.10.2009, 16:56   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Привела SA к типу sockaddr - если в общем.
Я к тому что


Код:
struct sockaddr_in {
	short	sin_family;
	u_short	sin_port;
	struct	in_addr sin_addr;
	char	sin_zero[8];
};
и
Код:
struct sockaddr {
	u_short sa_family;
	char	sa_data[14];
};
по размеру одинаковы. Одинаковое кол-во байт занимают в памяти, так что это не смертельо такая интерпретация этой структуры.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.10.2009, 17:36   #9
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

Stilet
Цитата:
Привела SA к типу sockaddr - если в общем.
Тоесть никаких манипуляций и преобразований собственно данных небыло? Просто компилятор стал считать что это тип sockkadr и потерял доступ к "лишней" инфе?
jojahti вне форума Ответить с цитированием
Старый 14.10.2009, 18:02   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

структуры по размеру одинаковы, просто все теже данные старой структуры будут читатся иначе, а именно:
short sin_family будет прочтено как u_short sa_family;
а это:
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
как
char sa_data[14];
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Int64. Непонятный формат времени. bogoga Общие вопросы Delphi 9 27.08.2009 17:10
Непонятный глюк Delphi 2009 aesoem Общие вопросы Delphi 3 15.08.2009 12:30
непонятный компилятор Waleriy Общие вопросы по Java, Java SE, Kotlin 2 11.12.2008 14:16
Что это за непонятный бред? Манжосов Денис :) О форуме и сайтах клуба 14 15.07.2008 22:50
непонятный код Kostua Помощь студентам 5 27.04.2008 18:17