ساختارها و اشاره گرها در برنامه نویسی C

رتبه: 5 ار 1 رای SSSSS
ساختارها و اشاره گرها

در این آموزش یاد خواهید گرفت که چگونه با استفاده از اشاره گرها به اعضای ساختارها در برنامه نویسی C دسترسی پیدا کنید. همچنین با تخصیص حافظه پویای ساختار آشنا خواهید شد.

ساختارها (Structures)

  • مفهوم یکپارچگی: ساختارها ابزاری برای بسته‌بندی و تجمیع متغیرهای مختلف (با انواع داده‌های متفاوت) در قالب یک نام و موجودیت واحد هستند.

  • تخصیص حافظه: برخلاف یونیون‌ها که تمام اعضا از یک فضای مشترک استفاده می‌کردند، در ساختارها به هر یک از اعضا فضای حافظه کاملاً مستقل و اختصاصی تعلق می‌گیرد. در نتیجه، اندازه نهایی یک ساختار در حافظه، برابر با مجموع حجم تک‌تک اعضای آن (به‌علاوه مقداری فضای احتمالی برای ترازسازی حافظه) است.

  • دسترسی هم‌زمان: از آنجا که هر عضو بلوک حافظه مختص به خود را دارد، تمام اطلاعات درون یک ساختار به صورت هم‌زمان معتبر و در دسترس هستند و تغییر یکی باعث از بین رفتن دیگری نمی‌شود.

  • فلسفه استفاده: هدف اصلی، سازمان‌دهی منطقی داده‌های پراکنده اما مرتبط به هم است تا بتوان مجموعه‌ای از اطلاعات ناهمگون را به عنوان یک بسته منسجم در سیستم تعریف و مدیریت کرد.

اشاره‌گرها (Pointers)

  • مفهوم آدرس‌یابی: اشاره‌گرها متغیرهای ویژه‌ای هستند که به جای نگهداری اطلاعات واقعی، «آدرس فیزیکی» یک خانه از حافظه سیستم را در خود ذخیره می‌کنند. آن‌ها شبیه به تابلوی راهنمایی هستند که به جای ارائه خودِ محتوا، نشان می‌دهند محتوا دقیقاً در کجای حافظه قرار دارد.

  • کنترل مستقیم و پویایی: این ابزار به برنامه‌نویس بالاترین سطح دسترسی را برای کنترل مستقیم حافظه سخت‌افزاری می‌دهد و امکان مدیریت پویای حافظه (دریافت و آزادسازی فضا در حین اجرای برنامه) را فراهم می‌کند.

  • فلسفه استفاده: هدف اصلی استفاده از اشاره‌گرها، جلوگیری از کپی شدن‌های بی‌موردِ داده‌های حجیم در حافظه، کاهش مصرف منابع سیستم و افزایش چشمگیر سرعت پردازش است.

ترکیب ساختارها و اشاره‌گرها قدرت واقعی زبان C در ترکیب این دو مفهوم نهفته است. زمانی که یک ساختار حاوی حجم عظیمی از اطلاعات است، جابه‌جا کردن و کپی کردن مکرر آن بین بخش‌های مختلف برنامه به شدت کُند و هزینه‌بر خواهد بود.

با استفاده از اشاره‌گرها، برنامه‌نویس به جای کپی کردن کل آن بسته اطلاعاتی سنگین، تنها «آدرس» آن ساختار را به بخش‌های مختلف برنامه ارسال می‌کند. علاوه بر این، ترکیب ساختارها و اشاره‌گرها پایه و اساس ایجاد معماری‌های داده پیشرفته و زنجیره‌ای را تشکیل می‌دهد؛ جایی که هر ساختار می‌تواند آدرس محل قرارگیری ساختار بعدی را درون خود نگه دارد و شبکه‌ای پیوسته از داده‌ها را در حافظه ایجاد کند.

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

  • اشاره گرها در برنامه نویسی C
  • ساختارها در برنامه نویسی C

اشاره گر به ساختار در C

در اینجا شیوه تعریف اشاره گر به ساختار آورده شده است.

struct name {

member1;

member2;

.

.

};

int main()

{

struct name *ptr, Harry;

}

در اینجا ptr یک اشاره گر به struct name است.

مثال: دسترسی به اعضای ساختار با استفاده از اشاره گر

برای دسترسی به اعضای یک ساختار با استفاده از اشاره گرها از عملگر <- استفاده می شود.

#include

struct person

{

int age;

float weight;

};

int main()

{

struct person *personPtr, person1;

personPtr = &person1;

printf(“Enter age: “);

scanf(“%d”, &personPtr->age);

printf(“Enter weight: “);

scanf(“%f”, &personPtr->weight);

printf(“Displaying:n”);

printf(“Age: %dn”, personPtr->age);

printf(“weight: %f”, personPtr->weight);

return 0;

}

در این مثال، آدرس person1 با استفاده از دستور personPtr = &person1; در اشاره گر personPtr ذخیره می شود.

حالا می توانید با استفاده از اشاره گر personPtr به اعضای person1 دسترسی پیدا کنید.

  • personPtr->age  معادل (personPtr).age* است
  • personPtr->weight  معادل (personPtr).weight* است.

تخصیص حافظه پویا ساختارها

قبل از شروع این بخش توصیه می کنیم آموزش تخصیص حافظه پویا در برنامه نویسی C را بررسی کنید.

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

مثال: تخصیص حافظه پویا ساختارها

#include

#include

struct person {

int age;

float weight;

char name[30];

};

int main()

{

struct person *ptr;

int i, n;

printf(“Enter the number of persons: “);

scanf(“%d”, &n);

// person از ساختار n تخصیص حافظه به تعداد

ptr = (struct person*) malloc(n * sizeof(struct person));

for(i = 0; i < n; ++i)

{

printf(“Enter first name and age respectively: “);

// person برای دسترسی به اعضای اولین ساختار,

// استفاده می شود ptr->name , ptr->age

// person برای دسترسی به اعضای دومین ساختار,

// استفاده می شود (ptr+1)->name , (ptr+1)->age

scanf(“%s %d”, (ptr+i)->name, &(ptr+i)->age);

}

printf(“Displaying Information:n”);

for(i = 0; i < n; ++i)

printf(“Name: %stAge: %dn”, (ptr+i)->name, (ptr+i)->age);

return 0;

}

خروجی

Enter the number of persons: 2

Enter first name and age respectively: Harry 24

Enter first name and age respectively: Gary 32

Displaying Information:

Name: Harry Age: 24

Name: Gary Age: 32

در مثال بالا، تعداد n متغیر از ساختار به صورت پویا ساخته شده است، n توسط کاربر وارد می شود.

ptr = (struct person*) malloc(n * sizeof(struct person));

سپس از اشاره گر ptr برای دسترسی به عناصر person استفاده شده است.

profile name
سریع آسان

بخندید کتاب بخونید و خوب باشید تا جامعه مون به آرامش برسه. لطفا ! هر سوالی دارید در بخش نظرات مطرح کنید. ما یا سایر هموطنان عزیز پاسخ خواهیم داد. برای کمک به سایت ما و گسترش آموزش در بین هموطنان، در سایتها، وبلاگ ها و شبکه های اجتماعی لینک سایت ما را درج کنید.

مطالب پیشنهادی برای شما

محصولات مرتبط

مشاهده همه
آموزش گیت و گیت هاب از صفر تا صد
آموزش گیت و گیت هاب از صفر تا صد
قیمت محصول 16٪ 737,000 تومان 880,000
ادامه مطلب
آموزش سی اس اس (CSS) از صفر تا صد
آموزش سی اس اس (CSS) از صفر تا صد
قیمت محصول 16٪ 737,000 تومان 880,000
ادامه مطلب
آموزش پایتون صفر تا صد (پکیج 2)
آموزش پایتون صفر تا صد (پکیج 2)
قیمت محصول 16٪ 737,000 تومان 880,000
ادامه مطلب
صفر تا صد آموزش HTML & CSS به زبان ساده
صفر تا صد آموزش HTML & CSS به زبان ساده
قیمت محصول 44٪ 179,000 تومان 320,000
ادامه مطلب

دیدگاهتان را بنویسید

1 2 3 4 5

1 نظر درباره «ساختارها و اشاره گرها در برنامه نویسی C»

  • ناشناس
    ناشناس آیا این دیدگاه مفید بود ؟

    personPtr-&gt;age معادل (personPtr).age* است
    این جمله صحیح است یا هنگام تایپ کردن جابه&zwnj;جایی صورت گرفته؟

    پاسخ
مشاهده همه نظرات
سبد خرید
سبد خرید شما خالی است
× جهت نصب روی دکمه زیر در گوشی کلیک نمائید
آی او اس
سپس در مرحله بعد برروی دکمه "Add To Home Screen" کلیک نمائید