ورود

View Full Version : مشکل در فهم قسمتی از کد یک برنامه



mhn1991
چهارشنبه 09 بهمن 1392, 22:18 عصر
با سلام خدمت اساتید من این قسمت از کد رو متوجه نمی شم
(struct sockaddr *) &server
این ساختمان که تو پرانتز هست چه اثری روی اشارگر server داره می زاره:عصبانی++:

rahnema1
پنج شنبه 10 بهمن 1392, 13:41 عصر
سلام
بستگی داره کجا به کار رفته باشه
ولی حدس می زنم این عبارت به عنوان آرگیومنت ورودی در تعریف یک تابع آمده
و در تعریف تابع اومده که آرگیومنت ورودی اون باید از نوع پوینتر به استراکچر sockaddr باشه
اما server از نوع یک استراکچره مثلا استراکچر addr1 اما از نوع استراکچر sockaddr نیست
ولی تابعی که قراره اون را به عنوان آرگیومنت ورودی قبول کنه انتظار داره یک متغیر از نوع sockaddr به اون ارسال بشه
اما ما می خواهیم همان عملیاتی که تابع myfunc روی sockaddr انجام میده روی addr1 هم انجام بده
یک راه حل اینه که یک تابه شبیه تابع myfunc بنویسیم که دقیقا همان کاری را بکنه که myfunc انجام میده فقط
آرگیومنت ورودی اون را از نوع addr1 تعریف کنیم اون موقع واسه صدا زدن تابع لازم نیست از (struct sockaddr *) استفاده بشه
اما یک راه حل دیگه اینه که اصلا تابع دیگری را تعریف نکنیم بلکه نوع ورودی را تبدیل کنیم بفرستیم به تابع
بنابراین قبل از این که استراکچر server که از نوع addr1 است رابه تابع ارسال کنیم اول اون را به نوع sockaddr کست cast می کنیم ( تغییر نوع می دهیم)
یعنی این پرانتزی که توش نوشته (struct sockaddr *) کارش تغییر نوع هست


#include <iostream>
using namespace std;
struct sockaddr {
int a;
int b;
};
struct addr1 {
int x;
int y;
int z;
};
void myfunc (struct sockaddr * myserver)
{
myserver->a=1000;
myserver->b=2;
}
int main()
{
struct addr1 server;
myfunc ((struct sockaddr *) &server);
cout<<server.y;
}



حالا این تابع میاد 8 بایت اول server را تغییر میده 4 بایت اول را به عنوان اولین int و 4 بایت دوم به عنوان دومین int