ورود

View Full Version : سوال: در این تکه کد ورودی و خروجی فایل ها چرا St اینگونه تعریف شده است؟



complexcoding
سه شنبه 20 تیر 1391, 13:12 عصر
با سلام
در این تکه کد ورودی و خروجی فایل ها چرا متغیر St اینگونه تعریف شده است؟
f1.write((char*)&st,sizeof(struct student));
(char*) یعنی چی؟
st& ؟
و (sizeof(struct student برای چیه؟

با تشکر

Ananas
سه شنبه 20 تیر 1391, 15:12 عصر
سلام.

(char*)

یعنی چی؟
اینجا اشاره گر به st که با &st مشخص میشه ممکنه از جنس اشاره گر به char نباشه که ما با نوشتن (char *) منظورمون رو صریحا اعلام میکنیم تا اشاره گر به st تبدیل بشه به اشاره گر به char و خطا نگیره.

Navid_QQQ
سه شنبه 20 تیر 1391, 16:14 عصر
در ادامه توضیحات دوست عزیز Ananas


sizeof(struct student)

سایز ساختار student رو به عنوان پارامتر می فرسته برای دوم .

برای اینکه کارکرد sizeof رو متوجه بشید این مثال رو اجرا کنید :



#include <iostream>
int main() {
std::cout << "sizeof(double) = " << sizeof(double);
std::cout << ", sizeof(char) = " << sizeof(char);
}


و این :




#include <stdio.h>

struct flexarray
{
char val;
char mychar;
};

int main(int argc, char **argv){
printf("sizeof(struct flexarray) = %zu\n", sizeof(struct flexarray));

return 0;
}

Ananas
سه شنبه 20 تیر 1391, 19:10 عصر
چرا از کلمه ی struct داخل پرانتز sizeof استفاده شده؟

Navid_QQQ
سه شنبه 20 تیر 1391, 22:54 عصر
چرا از کلمه ی struct داخل پرانتز sizeof استفاده شده؟

در سی استاندارد برخلاف سی پلاس پلاس وقتی شما یه ساختار تعیین می کنید . وقتی می خوایید به اون ساختار دست پیدا کنید باید از کلمه ی کلیدی struct استفاده کنید .

برای مثال :



struct student{
char a ;
};


برای ایجاد یک نمونه از این ساختار در سی-استاندارد:



struct student value;


در مورد عملگر sizeof هم به همین گونه هست :



sizeof(struct student);


ولی در مورد نمونه ی ساخته شده از ساختار میشه این کار رو کرد :



sizeof(myvalue);



در حالی که همون ساختار در سی پلاس پلاس می شه یه این طریق با عملگر sizeof استفاده کرد :



sizeof(student);