آموزش اشاره گر به struct در C++ (به زبان کاملا ساده)

رتبه: 5 ار 1 رای SSSSS
آموزش اشاره گر به struct در C++
نویسنده: میلاد حیدری زمان مطالعه 1 دقیقه
Banner Image

در این آموزش، نحوه استفاده از اشاره گرها برای دسترسی به داده ها در struct را به همراه مثال می آموزید.

متغیر اشاره گر فقط برای انواعی مانند (int، float، double و غیره) ایجاد نمی شود، بلکه برای متغیر های ساختار هم تعریف می شود.

در اینجا نحوه ایجاد اشاره گر به ساختار را مشاهده می کنید:

  1. #include
  2. using namespace std;
  3. struct temp {
  4. int i;
  5. float f;
  6. };
  7. int main() {
  8. temp *ptr;
  9. return 0;
  10. }

در مثال بالا اشاره گر ptr از نوع ساختار temp ایجاد شده است.

مثال : اشاره گر به ساختار در C++

  1. #include
  2. using namespace std;
  3. struct Distance
  4. {
  5. int feet;
  6. float inch;
  7. };
  8. int main()
  9. {
  10. Distance *ptr, d;
  11. ptr = &d;
  12. cout << “Enter feet: “;
  13. cin >> (*ptr).feet;
  14. cout << “Enter inch: “;
  15. cin >> (*ptr).inch;
  16. cout << “Displaying information.” << endl;
  17. cout << “Distance = ” << (*ptr).feet << ” feet ” << (*ptr).inch << ” inches”;
  18. return 0;
  19. }

خروجی

Enter feet: 4

Enter inch: 3.5

Displaying information.

Distance = 4 feet 3.5 inches

در این برنامه، متغیر اشاره گر ptr و متغیر عادی d از نوع ساختار Type تعریف شده اند.

آدرس متغیر d در اشاره گر ptr ذخیره می شود، یعنی ptr به متغیر d اشاره دارد. سپس، اعضای struct متغیر d با استفاده از اشاره گر قابل دسترسی هستند.

نکته: از آنجا که اشاره گر ptr به متغیر d در این برنامه اشاره دارد،

(*ptr).inch

و

d.inch

دقیقا یکی هستند.

(*ptr).feet

و

d.feet

هم یکی هستند.

روش دیگر دسترسی به اعضای struct با اشاره گر، استفاده از -> است.

ptr->feet is same as (*ptr).feet

ptr->inch is same as (*ptr).inch

تکات مهم 

در استفاده از اشاره‌گرها به ساختارها (struct) در C++، توجه به چند نکته مهم می‌تواند به بهبود عملکرد و جلوگیری از بروز خطاهای رایج کمک کند.در اینجا به برخی از این نکات مهم اشاره می‌کنیم:

1.مدیریت حافظه دینامیکی

هنگام استفاده از حافظه دینامیکی با `new` و `delete`، مطمئن شوید که به درستی حافظه را تخصیص داده و آزاد می‌کنید تا از نشت حافظه (memory leak) جلوگیری شود.

Person* personPtr = new Person{"Bob", 25};

// استفاده از personPtr

delete personPtr; // آزادسازی حافظه

2.استفاده از smart pointers

برای مدیریت خودکار حافظه و جلوگیری از مشکلات نشت حافظه، از smart pointers ها مثل `std::unique_ptr` و `std::shared_ptr` استفاده کنید.

#include <memory>

 

std::unique_ptr<Person> personPtr = std::make_unique<Person>("Bob", 25);

// استفاده از personPtr، حافظه به طور خودکار آزاد می‌شود

3.استفاده از اشاره‌گرهای توابع در ساختارها

هنگام استفاده از اشاره‌گرهای توابع در ساختارها، مطمئن شوید که امضای تابع (function signature) درست باشد.

struct Calculator {

    int (*add)(int, int);

};

 

int add(int a, int b) {

    return a + b;

}

 

Calculator calc = { add };

4.مدیریت ساختارهای تو در تو

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

struct Address {

    std::string city;

    std::string street;

};

 

struct Person {

    std::string name;

    int age;

    Address* address;

};

 

Address addr = {"New York", "5th Avenue"};

Person person = {"Charlie", 28, &addr};

 

 5.استفاده از const برای ایمنی بیشتر

اگر قرار نیست اشاره‌گر یا داده‌های اشاره‌شده تغییر کنند، از `const` استفاده کنید تا ایمنی کد افزایش یابد.

void printPerson(const Person* personPtr) {

    std::cout << "Name: " << personPtr->name << ", Age: " << personPtr->age << std::endl;

}

 6.استفاده از آرایه‌ها و اشاره‌گرها

در مدیریت آرایه‌های ساختارها با اشاره‌گرها، دقت کنید که به محدوده آرایه (array bounds) تجاوز نکنید.

Person people[3] = { {"David", 30}, {"Eva", 22}, {"Frank", 27} };

Person* personPtrs[3];

for (int i = 0; i < 3; ++i) {

    personPtrs[i] = &people[i];

}

7.مدیریت صحیح مقداردهی اولیه

مطمئن شوید که ساختارها و اشاره‌گرها به درستی مقداردهی اولیه شده‌اند تا از بروز خطاهای دسترسی به حافظه جلوگیری شود.

Person person;

Person* personPtr = &person;

personPtr->name = "Alice"; // مقداردهی اعضای ساختار

personPtr->age = 30;

 8.استفاده از مرجع‌ها به جای اشاره‌گرها

در برخی موارد، استفاده از مرجع‌ها (references) به جای اشاره‌گرها می‌تواند خوانایی کد را افزایش دهد و از برخی مشکلات اشاره‌گرها جلوگیری کند.

void printPerson(const Person& person) {

    std::cout << "Name: " << person.name << ", Age: " << person.age << std::endl;

}

 

Person person = {"Alice", 30};

printPerson(person);

9.رعایت قوانین دسترسی به حافظه

از دسترسی به حافظه‌ای که آزاد شده است یا مقداردهی نشده است، پرهیز کنید.این دسترسی‌ها می‌توانند منجر به رفتارهای غیرقابل پیش‌بینی شوند.

10.آگاهی از زمان زندگی متغیرها

هنگام استفاده از اشاره‌گرها، توجه کنید که متغیر مورد اشاره از محدوده (scope) خارج نشود و حافظه آن همچنان معتبر باشد.

با رعایت این نکات، می‌توانید به صورت کارآمدتر و ایمن‌تر با اشاره‌گرها به ساختارها در C++ کار کنید و از بروز خطاهای رایج جلوگیری کنید.

profile name
میلاد حیدری

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

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

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

مشاهده همه
آموزش برنامه نویسی سی پلاس پلاس
آموزش برنامه نویسی سی پلاس پلاس
قیمت محصول 230,000 تومان 250,000
ادامه مطلب

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

1 2 3 4 5

1 نظر درباره «آموزش اشاره گر به struct در C++ (به زبان کاملا ساده)»

  • محمد رضا
    محمد رضا آیا این دیدگاه مفید بود ؟

    مطالب مفید و کاربردی هستند
    ولی یه ایراد داره اینکه بدون اطلاعات قبلی نمی تونی این مقاله رو درک کنی
    توصیه می کنم قبل از اینکه وارد مباحث سخت تر بشین اطلاعات پایه را درج کنید

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