نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
مهدی دمیرچیلو

آموزش کامل typedef و struct

به نام خدا : تو این مطلب مخوام به توضیح مختصری درباره کلمات کلیدی typedef و struct تو زبون های C و ++C بپردازم، میخواستم مطلب RC522 رو بزارم تو سایت دیدم این مطلب نیاز هستش چون برا توضیح توابع این ماژول نیاز هستش که این بحث رو بخونید و بدونید چون اون موقع من مجبور بودم کلمات غلمبه سلمبه ای بگم و شما هم احتمالا متوجه نمیشدید.
آموزش کامل typedef و struct

آموزش کامل typedef و struct


داستان
جشن تولد : امروز ۸مرداد هستش، یعنی روز تولد داشتون focus، داشتم با خودم میگم نامردا(اعضای خونواده) به روی خودشون هم نمیارن که امروز تولد من هستش(البته یادشون نبود) بعد به خودم گفتم جشن تولد! شادی برای سالروز تولد؟ یعنی شادی برای روز تولد یه فرد مهم، حالا مگه من آدم مهمی هستم؟ چه کار مفیدی تا حالا کردم؟ حالا توقع هم داری جشن هم برات بگیرن، جشن رو باید برا این شهدای مدافع حرم گرفت، برا این افرادی که برای پیشرفت علم تو کشور تلاش میکنن گرفت، برای اونایی گرفت که به کشور و اسلام خدمت میکنن، حالا با این حال توقع داری برات جشن تولد بگیرن؟ هیچی دیگه قانع شدم laugh که جشن تولد نگیرن برام تازه بهتر هستش و اصلا به قول مادرم دیگه بچه که نیستی برات جشن تولد بگیریم که rofl، خب دیگه وقت تلف کردن بسه بریم سراغ مطلبمون.
یه خبری خوندم(البته مال خیلی وقت پیش هستش) گفتم اینجا هم بزارم جالبه، عکس امام خامنه ای(کرم الله وجهه) و امام خمینی(ره) تو کاخ صدام!(حجم عکسش زیاد بود تو سایت نزاشتم ولی بسرچسین تو گوگل خبرش میاد بالا)، به امید نصب عکس رهبر جهان اسلام تو قدس و کعبه.

توجه : در زیر مثال هایی قرار میدم، کدهایی که به زبون C هستن رو میتونید تو کدویژن یا ++Dev-C اجرا کنید و کدهایی که به زبون ++C هستن رو میتونید تو آردوینو، Microsoft Visual Studio و یا نرم افزار ++Dev-C اجرا کنید.(تو نرم افزار Dev میتونید به زبون C و هم ++C برنامه بنویسید تازه حجمش هم زیر ۳۰ میگ هستش اگه اشتباه نکنم، خودمم هم نصب کردم، نرم افزار خوبی هستش حتما نصب کنید اگه میخواین برنامه نویسی رو حرفه ای یاد بگیرید، خیلی بکارتون میاد، حالا یکی بیاد بگه خیلی یعنی چقدر 😀 )

کاربرد کلمه کلیدی typedef

کاربرد کلمه کلیدی typedef

کلمات کلیدی برای سرچ! : تغییر نام متغیرها در سی
تو هر دو زبون C و ++C به صورت زیر هستش :
برای تغییر نام متغییرها میتونیم از typedef استفاده کنیم.

typedef  <اسم جدید> <نوع موجود>

مثلا نحوه به وجود آمدن متغییر های uint8 و uint16_t و ... در آردوینو به کمک همین کلمه کلیدی هستش smile
مثال۱) در مثال زیر نام متغییر unsigned short رو به uint8_t تغییر میدم و بعد یه متغییر با نام Number از نوع uint8_t ایجاد میکنم و بهش مقدار اولیه میدم.

مثال۲) تعریف نوع اشاره گر
اگه از اشاره گر چیزی نمیدونید مطلب زیر رو بخونید :
آموزش جامع اشاره گرها در Pointer Tutorial in C

مثال۳) تعریف یه نوع جدید متغییر با قابلیت تعداد تعداد بایتش!
این مثال خیلی جالبه، البته میشه به جای آرایه تک بعدی از آرایه ۲ بعدی و بالاتر استفاده کرد.
الان آرایه از نوع int با اندازه ۱۰ رو اسمش رو به CardNumber تغییر دادیم و هر زمانی که دلمون بخواد میتونیم اندازه متغییرهای از نوع CardNumber رو به راحتی تغییر بدیم.

مثال۴) String
خب همون طور که میدونید تو زبان ++C چیزی به نام STRING نداریم ولی میتونیم داشته باشیم ^_^

توجه : در زیر شاید براتون سوال باشه که چرا عنوان بعدی به دو زبون C و ++C جدا کردم، اولا موضوعی که در ادامه میخوام بگم تو این دو زبون یکم با هم فرق داره، تو C که بابای ++C هستش! یکم موضوع سخت تره ولی تو ++C خیلی آسون تره این موضوع، این یه طرف، موضوع دیگه اینه که کامپایلر هایی مثل کدویژن زبونشون C هستش و کامپایلر های آردوینو و اتمل استدیو(اینو مطمئن نیستم) زبونشون ++C هستش.

کاربرد کلمه کلیدی struct

برای یادگیری این موضوع مطالب و لینک ها و فیلم های زیر رو ببینید و من دیگه توضیح نمیدم و فقط مثال هایی مفید با توضیحاتی ۱خطی( laugh البته انتهای این خطه کجاس خدا میدونه pardon ) براتون میزارم :
آموزش ساختار (Structure) و یونیون (Union) در برنامه نویسی C (فیلم)
جلسه نوزدهم – آشنایی با struct و تعریف تابع (فیلم)
هر آنچه در تعریف متغیر باید بدانیم (قسمت ساختمون هاش! رو فقط بخونید.)
زبان C – ساختارها (جلسه ۷)
یه سری فایل (PDF و پاورپوینت) برا این موضوع تو نت هستش که برید بگیردید و دانلود کنید، من جمعشون کرده بودم و مرتب و دسته بندی ولی اشتباهی پاکشون کردم. cry
فصل ۹ – نوعهای تعریف شده
ساختمان و نوع شمارشی

کاربرد کلمه کلیدی struct در زبون ++C
خب این موضوع تو زبون ++C خیلی راحت تره تا تو C (البته تو C هم راحت هستش ولی ++C خیلی راحت تره ^_^)، خب بریم سراغ بحث خودمون، اینم بگم که فرض من اینه که شما لینک و مطالب بالا رو خوندید و میدونید struct :
تمام ساختار ها و تموم حالت هایی که برا بحث struct تو زبون C هستش، تو ++C هم هستش ولی چون یه حالت ساده تر تو ++C هستش لذا دیگه ما به اون حالت ها کاری نداریم و حالتی که مختص زبون ++C هستش رو بهش میپردازیم.(اگه متوجه این چراگراف نشدید یعنی قسمت struct تو زبون C رو نخوندید sarcastic )
خب دیگه جدا بریم سراغ اصل مطلب :

فرم کلی استراکچر (همون struct منظورمه) به صورت زیر هستش :

الان ما انگار یه متغییر جدید مثل int - float و... ایجاد کردیم، مثلا وقتی میخواین یه متغییر از نوع int ایجاد کنید کد زیر رو مینویسید  :

حالا میخواین متغیر هایی از نوع struct یی که ساختین ایجاد کنید( متغییر هایی از نوع Person ) : برای این کار هم ما دقیقا مثل تعریف متغییر های معمولی عمل میکنیم :

البته میتونیم کد بالا رو هم ننویسیم و از متغییر های از پیش تعریف شده خود استراکچرمون استفاده کنیم.( که در استراکچر بالا من دو تا متغییر از پیش تعریف شده با نام های Ali و Reza ایجاد کردم، میتونستم هم اصلا ایجاد نکنم و یا بیشتر ایجاد کنم، یه چیز دلبخواهی! هستش)

حالا اون نوع استراکچری که در بالا میبینید هر کسی میتونه متغییر هایی از نوع Person ایجاد کنه، ولی اگه دوست نداشتید این اتفاق بیوفته و دوست دارین خودتون یک(چند) متغییر از پیش تعریف شده تعریف کنید تو استراکچرتون و تو برنامه از همون متغییر(های) از پیش تعریف شده استفاده بشه و دیگه متغییر جدیدی از اون استراکچر ایجاد نشه، برای این کار استراکچرمون رو به صورت زیر مینویسیم، مثلا در زیر من به همون ۲ متغییر از پیش تعریف شده اکتفا میکنم و همین دو برام کافی هستش :

الان با تعریف استراکچرمون به صورت بالا دیگه کسی نمیتونه متغییری از نوع استراکچر بالا ایجاد کنه چون دیگه Person (نام استراکچر) وجود نداره و تو برنامه باس از متغییر های از پیش تعریف شده Ali و Reza استفاده کنیم.

خب حالا استراکچرمون رو تعریف کردیم، حالا دیگه بریم سراغ تعریف متغییر هایی از نوع اسکراچر ایجاد شده، مقدار دهی، مقدار دهی اولیه و...

اووووون چقدر طولانی شد، ولی خب چیز خاصی نداره، سعی کردم انواع حالت مقدار دهی رو بنویسم تا دوستان کامل متوجه بشن.
خط ۱ تا ۶ : استراکچر رو تعریف کردم و ۴ تا متغییر پیشفرض تعریف کردم و به آخریش مقدار اولیه دادم.
خط ۱۱ تا ۲۰ : تو این خطوط ۳ روش مقدار دهی متغییر ها رو مشاهده میکنید.
خط ۲۴ : تو این خط یه متغییر جدید ایجاد کردم و مقدار اولیه بهش دادم.
خط ۲۵ : اینم مثل خط ۲۸ هستش فقط به یه روش دیگه مقدار اولیه به متغییر جدیدم دادم.
خط ۲۷ تا ۳۰ : اینم مثل دو خط ۲۸و۲۹ فقط روش عوض شده.(البته حتما نباید همون اول کار بعد از تعریف متغییر مقدار دهی کرد، اجباری نیست، میشه بعدا هم مقدار دهی کرد، کلا مثلا تعریف و مقدار دهی متغییر های معمولی هستش این struct)

کاربرد کلمه کلیدی struct در زبون C
خب الان این قسمت رو با این فرض میگم که شما اون لینک ها (و مطالبی و کتب و...) بالا رو خوندید و عنوان بالا که برا ++C من نوشتم رو هم خوندید و الان اومدید سراغ این مبحث برای زبون C :

توجه۱ : تعریف یه ساختار که اسم نداشته باشه(تا کسی نتونه متغییر های جدیدی از اون نوع ساختار ایجاد کنه) و تعریف متغییر های پیشفرض برای اون ساختار دقیقا مثل زبون ++C هستش (در زیر میبینید) :

توجه۲ : تعریف ساختار تو C شبیه ++C هستش فقط با یه تفاوت، برای تعریف متغییر هایی از نوع ساختارمون باید در هنگام ایجاد متغییر جدید struct رو قرار بدیم(خط ۸ مثال زیر)، برای بهتر متوجه شدن مثال زیر رو ببینید :

توجه۳ : یه حالت دیگه هم هستش که دقیقا مثل حالت بالا هستش فقط یکمکی فرق داره، حالا دقیقا چه فرقی با مورد بالا داره تا این لحظه من متوجه نشدم.(کلا این مورد رو بیخیال بشید اگه حال تحقیق کردن ندارید)

توجه۴ : برای حل مشکل بالا (مثال مربوط به توجه۲) میایم و از کلمه کلیدی typedef استفاده میکنیم تو تعریف ساختار تا دیگه مجبور نباشیم همش هنگام تعریف متغییر های جدید struct رو قرار بدیم :

اما نکته ای که هستش اینه که دیگه Person توی خط ۶ دیگه متغییر پیشفرض نیست و نام استراکچر ما هستش در واقع!!!
توجه : تو بحث enum هم این کلمه کلیدی typedef رو یادتون نره قرار بدید قبل از enum؛ من داشتم خیر سرم کتابخونه مینویشتم و حواسم نبود قبل از enum کلمه کلیدی typedef رو قرار بدم، پوستم کنده شد، همش خطا میداد و منم نمیدونستم مشکل از کجاس.

چند تا مثال کوچولو در باره struct به زبون ++C
اگه میخواین از Microsoft Visual Studio استفاده کنید که هیچ ولی اگه میخواین از Dev-C++ استفاده کنید خط اول پروژه های زیر رو حذف کنید(چون یکی از کتابخونه های Microsoft Visual Studio هستش )، اگه میخواین تو آردوینو تست کنید که باید ۳ خط اول پروژه رو حذف کنید و از تابع Cout استفاده نکنید(چون تو آردوینو تا جایی که میدونم نیستش) و کدهای داخل تابع Main رو هم بزارید داخل تابع Setup

مثال۱) در مثال زیر با نحوه تعریف یه struct ساده + تعریف متغییر هایی از نوع Struct تعریف شده + انواع روش مقدار دهی و مقدار دهی اولیه + نمایش مقدار این نوع از متغییر ها در خروجی> آشنا میشید.

مثال۲) آرایه از نوع struct
در زیر بعد از تعریف استراکپر Date، یه آرایه از این نوع میسازیم و بعد میریم این آرایه رو مقدار دهی میکنیم.

مثال۳) استفاده از یه struct تعریف شده در struct دیگر!

مثال۴) struct تو در تو.

تحقیق کنید :  bomb 

  1. فرق struct با class
  2. فرق struct با enum
  3. فرق دو مثال "توجه۲" و "توجه۳" از قسمت "کاربرد کلمه کلیدی struct در زبون C"

هزینه مطلب : دعا برای نابودی رژیم های منحوس صهیونیستی و آل سقوط!
خب امیدوارم این مطلب مفید باشه براتون، اگه جایی اشتباه بود ممنون میشم بگید، فعلا یا علی.

پسورد فایل های سایت :
www.dmf313.ir
مهدی دمیرچیلو جنگ ما فتح قدس را در پی خواهد داشت (امام خمینی) >>>>>> اگر از صدام بگذریم، اگر مسأله قدس را فراموش کنیم، اگر از جنایت های امریکا بگذریم از آل سعود نخواهیم گذشت. ان‌شاالله اندوه دلمان را را در وقت مناسب با انتقام از امریکا و ال سعود برطرف خواهیم کرد و داغ و حسرت حلاوت این جنایت بزرگ را بر دلشان خواهیم گذاشت و با برپایی جشن پیروزی حق بر جنود کفر و نفاق و آزادی کعبه از دست نااهلان و نامحرمان به مسجد الحرام وارد خواهیم شد (امام خمینی)
ارسال دیدگاه
10

1) تعداد حروف غیر فارسی از حروف فارسی بیشتر باشه دیدگاه به صورت خودکار حذف میشه.

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید : debian

  1. Avatar

    مهمان

    نژند

    سلام و تشکر از آموزش های کامل و بی دریغی که در سایت قرار دادین
    و با آرزوی سلامتی

    1397/07/27
    01:20
  2. Avatar

    مهمان

    یاسر

    دمت گرم مهندس خیلی خوب بود خدا قوت

    1396/01/19
    08:50
  3. Avatar

    مهمان

    بهزاد

    کاش همه اموزشها مثل اموزشهای شما بود. دست و پنجت در نکنه ( پنجه چون تایپ میکنی:)) )

    1395/12/09
    09:47
  4. Avatar

    مهمان

    amirmasoud

    برای کم کردن حجم فیلم وعکس از نرم افزار اندرویدی cram itاستفاده کنید
    فوق العاده است من که اس 5 دارم دست به دامنشم 8مگو به 2 مگ تبدیل می کنه

    1395/08/07
    10:01
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      من که موبایل ندارم ولی خب از نرم افزار کامپیوتر VIDEIO COMPRESOR که استفاده میکنم 1گیگو میکنه 10 میگ cool

      1395/08/07
      10:04
  5. Avatar

    مهمان

    amirmasoud

    اگه میخواین تو آردوینو تست کنید که باید 3 خط اول پروژه رو حذف کنید
    تا اونجایی که من دیدم در نسخه جدید این امر میسر شده

    1395/08/07
    09:57
  6. Avatar

    مهمان

    محمد صنعتگر

    سلام خیلی کاربردی و عالی بود
    بازم دمتون گرم

    1395/08/03
    08:03
  7. Avatar

    مهمان

    عماد

    تولدت مبارک داش مهدی
    ایشالا شونصد ساله شی

    1395/05/09
    11:24
  8. Avatar

    مهمان

    حجت

    سلام داداش، تولدته؟ تولدت مبارک ، الهی که عمر طولانی و باعزت همراه با خدمت به خلق داشته باشی مثل الان! موفق و موید باشی…

    1395/05/09
    02:34
  9. Avatar

    مهمان

    حسین

    سلام تولدت مبارک
    باور کن مریدت شدم اینقد با معرفتی که آموزش رایگان میزاری دمت گرم ایشالله 200 ساله بشی

    1395/05/08
    07:06