সি প্রোগ্রামিং এইচটিএমএল সিএসএস জাভাস্ক্রিপ্ট পিএইচপি এসকিউএল
ফোরাম
×

 সি টিউটোরিয়াল

সি প্রোগ্রামিং কি? সি এর ইতিহাস সি এর বৈশিষ্ট্যসমূহ কেন সি শিখবেন? সি ইন্সটলেশন প্রথম সি প্রোগ্রাম সি প্রোগ্রামের ফ্লো প্রোগ্রামিং শেখার সঠিক পদ্ধতি সি কীওয়ার্ড সি আইডেন্টিফায়ার সি ভ্যারিয়েবল সি কনস্ট্যান্ট সি ডাটা টাইপ সি মোডিফায়ার সি ইনপুট/আউটপুট সি অপারেটর সি কমেন্ট সি অপারেটর অগ্রাধিকার

সি কন্ট্রোল স্টেটমেন্ট

সি ইফ সি ইফ...ইলস সি ফর লুপ সি হোহাইল লুপ সি ডু...হোহাইল লুপ সি ব্রেক সি কন্টিনিউ সি সুইচ স্টেটমেন্ট সি goto স্টেটমেন্ট

 সি ফাংশন

সি ফাংশন পরিচিতি সি ইউজার কর্তৃক ফাংশন সি ফাংশন টাইপ সি রিকার্সন সি ভ্যারিয়েবল স্কোপ

 সি অ্যারে

সি অ্যারে পরিচিতি সি মালটি-ডাইমেনশনাল অ্যারে সি অ্যারে ফাংশন

 সি স্ট্রিং

সি স্ট্রিং সি স্ট্রিং ফাংশন

 সি পয়েন্টার

সি পয়েন্টার পরিচিত সি পয়েন্টার অ্যারে সি পয়েন্টার ফাংশন সি মেমোরি ম্যানেজমেন্ট

 সি ফাইল এবং স্ট্রাকচার

স্ট্রাকচার পরিচিত স্ট্রাকচার ও পয়েন্টার সি স্ট্রাকচার ও ফাংশন সি ইউনিয়ন ফাইল হ্যান্ডেলিং

 সি অতিরিক্ত টিউটোরিয়াল

সি লাইব্রেরী সি প্রিপ্রোসেসর এবং ম্যাক্রো সি ইনুমিরেশন সি এরর নিয়ন্ত্রণ সি টাইপ কাস্টিং সি বিট ফিল্ড সি ভ্যারিয়েবল আর্গুমেন্ট সি কমান্ড লাইন আর্গুমেন্ট

 

সি প্রোগ্রামিং স্ট্রাকচার এবং পয়েন্টার


এই অধ্যায়ে আপনি স্ট্রাকচার(structure) এবং পয়েন্টার(pointer) সম্পর্কিত কিছু প্রাসঙ্গিক উদাহরণ দেখবেন যা আপনাকে স্ট্রাকচার থকে পয়েন্টার(pointer) ব্যবহার করে ডেটা এক্সেস(data access) করার জন্য সাহায্য করবে।

পয়েন্টার(pointer) ব্যবহার করে স্ট্রাকচার(structure) তৈরি এবং এক্সেস উভয়ই করা যেতে পারে। নিম্নের ন্যায় স্ট্রাকচার টাইপের পয়েন্টার ভ্যারিয়েবল তৈরি করা যেতে পারেঃ

struct name {
    member1;
    member2;
    .
    .
};

int main()
{
    struct name *ptr; 
}

উপরের প্রোগ্রামে struct name টাইপের একটি পয়েন্টার ভ্যারিয়েবল(*ptr) তৈরি হয়েছে।


পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারকে এক্সেস করা

পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বার(member) কে দুইভাবে এক্সেস করা যায়ঃ

  1. পয়েন্টারকে অন্য এড্রেসে রেফার করে মেমোরি এক্সেস করা
  2. ডাইনামিক মেমোরি এলোকেশন(dynamic memory allocation) ব্যবহার করে।

১। পয়েন্টারকে অন্য এড্রেসে রেফার করে মেমোরি এক্সেস করা

পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারকে এক্সেস করার জন্য সি প্রোগ্রামঃ

#include <stdio.h>
typedef struct person
{
   int age;
   float weight;
};

int main()
{
    struct person *personPtr, person1;
    personPtr = &person1;  //person1 এর মেমোরি এড্রেসে পয়েন্টারকে রেফার করা

    printf("Enter integer: ");
    scanf("%d",&(*personPtr).age);

    printf("Enter number: ");
    scanf("%f",&(*personPtr).weight);

    printf("Displaying: ");
    printf("%d%f",(*personPtr).age,(*personPtr).weight);

    return 0;
}

উপরের উদাহরণে struct person টাইপের পয়েন্টার ভ্যারিয়েবলকে person1 ভ্যারিয়েবলের এড্রেসে রেফার(refer) করা হয়েছে। তাই শুধুমাত্র পয়েন্টারের মাধ্যমে স্ট্রাকচার মেম্বারকে এক্সেস(access) করা যায়।

স্ট্রাকচার এর পয়েন্টার মেম্বারকে এক্সেস করার জন্য ->(Arrow) অপারেটর ব্যবহার করা হয়।

.(Dot) অপারেটর ব্যবহার করেও স্ট্রাকচার এর পয়েন্টার মেম্বারকে এক্সেস করতে পারেন।

(*personPtr).age এবং  personPtr->age একই রকম
(*personPtr).weight এবং personPtr->weight একই রকম

২। ডাইনামিক মেমোরি এলোকেশন ব্যবহার করে পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারকে এক্সেস করা

পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারকে এক্সেস করার জন্য malloc() ফাংশন ব্যবহার করে ডাইনামিকভাবে মেমোরি বরাদ্দ করা যেতে পারে।

malloc() ব্যবহারের সিনট্যাক্স

ptr = (cast-type*) malloc(byte-size)

malloc() ফাংশন ব্যবহার করে পয়েন্টারের মাধ্যমে স্ট্রাকচারের মেম্বারকে এক্সেস করার জন্য সি প্রোগ্রাম

#include <stdio.h>
#include <stdlib.h>
struct person {
   int age;
   float weight;
   char name[30];
};

int main()
{
   struct person *personPtr;
   int i,num;

   printf("Enter number of persons: ");
   scanf("%d", &num);

   personPtr = (struct person*) malloc(n * sizeof(struct person));
   //personPtr পয়েন্টারের জন্য  উপরের স্টেটমেন্টটি n সংখ্যক স্ট্রাকচারের জন্য মেমোরি বরাদ্দ করে */

   for(i = 0; i < n; ++i)
   {
       printf("Enter name, age and weight of the person respectively:\n");
       scanf("%s%d%f", &(ptr+i)->name, &(ptr+i)->age, &(ptr+i)->weight);
   }

   printf("Displaying Infromation:\n");
   for(i = 0; i < num; ++i)
       printf("%s\t%d\t%.2f\n", (ptr+i)->name, (ptr+i)->age, (ptr+i)->weight);

   return 0;
}

আউটপুট

Enter number of persons: 2
Enter name, age and weight of the person respectively:
Adam
2
3.2
Enter name, age and weight of the person respectively:
Eve
6
2.3
Displaying Information
Adam	2	3.20
Eve	6	2.30