Back to Top

Dynamic Memory Allocation এবং FILE Operation and Pointer in C Program


Call by Value এবং Call by Reference ব্যাখ্যা কর ।

Call By ValueCall By Reference

Original Value এর কোনো পরিবর্তন হয় না।

এখানে Original Value এর পরিবর্তন হয় ।

এখানে ভেরিয়েবলের অনুলিপি (Copy of variable) পাস হয়ে থাকে। 

এখানে ভেরিয়েবল নিজেই পাস হয়ে থাকে।

Actual এবং Formal Argument ভিন্ন ভিন্ন Memory Location এ তৈরি হয় । 

Actual এবং Formal Argument একই Memory

Location এ তৈরি হয়। 

ভেরিয়েবলের মান কে একটি সরল পদ্ধতি ব্যবহার করে পাস করা হয়

ভেরিয়েবলের ঠিকানা (Address of Variable)সঞ্চয় করতে পয়েন্টার এর প্রয়োজন হয় ।

int main() {

     int x = 10;
     printf("before calling=%d",x);
      increment(x);
     printf("After calling=%d",x);
     getch();
   }
    void increment(int a) {
                 a = a + 1;
                printf("value is=%d",a);
     }

 int main() {

      int x = 10;
      printf("before calling=%d",x);
      increment(&x);
      printf("After calling=%d",x);
      getch();
    }
    void increment(int *a) {
                 *a = *a + 1;
                printf("value is=%d",*a);
     }


Command Line argument বলতে কি বোঝ? এটির Syntax-টি লেখ ।

প্রোগ্রামিংয়ে কমান্ড লাইন আর্গুমেন্ট(Command Line argument) একটি গুরুত্বপূর্ণ ধারণা। main() এর মধ্যে argument/parameter প্রেরন করা হয় এবং বাইরে থেকে অর্থাৎ Command Line থেকে নিয়ন্ত্রন করার চেষ্টা করা হয় 
 Syntax: int main(int argc, char *argv[])
এখানে main() - এর মধ্যে দুটি parameter/argument প্রেরন করা হয়েছে। "argc"- কমান্ড লাইন (Command Line)- এর মধ্যে parameter/argument-এর সংখ্যা গণনা করে "argv[]"- একটি পয়েন্টার অ্যারে যা char type পয়েন্টার ধারণ করে প্রোগ্রামে পাস হওয়া parameter/argument কে  নির্দেশ করে।

C Programming language-এর নিম্নলিখিত term গুলি উদাহারন সহ ব্যাখ্যা কর । 1)fseek() 2)fwrite

fseek(): fseek ফাংশনটি ফাইলের অবস্থান নির্দেশককে একটি ফাইলের একটি নির্দিষ্ট স্থানে সরাতে ব্যবহৃত হয়।

Syntax: FILE *FilePointer

                fseek(FilePointer,OffsetValue, StartPosition)

FilePointer হল একটি ফাইল অবজেক্টের একটি পয়েন্টার যা আগে ফোপেন ব্যবহার করে খোলা হয়েছিল।

OffsetValue হল ফাইলের অবস্থান নির্দেশক সরানোর জন্য বাইটের সংখ্যা।

StartingPosition হল-যেখানে অফসেট প্রয়োগ করা হয় সেখান থেকে অবস্থান।

 এটি নিম্নলিখিত মানগুলির মধ্যে একটি নিতে পারে:

SEEK_SET: অফসেট ফাইলের মান  প্রথম থেকে শুরু হবে (0)।

SEEK_CUR: অফসেটটি ফাইলের মান বর্তমান অবস্থান থেকে শুরু হবে(2)।

SEEK_END: ​​অফসেট ফাইলের মান  শেষ থেকে শুরু হবে (1)।

fwrtie(): fwrite ফাংশনটি একটি ফাইলে ডেটা লিখতে ব্যবহৃত হয়। fwrite ফাংশনের জন্য Syntax হল:

            size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);

'ptr'-  ডাটা লেখার জন্য একটি পয়েন্টার ব্যবহার হয়।

'size'- Size হল বাইটে প্রতিটি উপাদানের আকার(Size)।

'count'-File এর মধ্যে যত গুলি element কে লিখতে হবে তার সংখ্যা বোঝায়

'stream'-স্ট্রিম হল একটি ফাইল অবজেক্টের(File Object)একটি পয়েন্টার(pointer)যা আগে fopen() ব্যবহার করে খোলা হয়েছিল

example: 

#include <stdio.h>

int main() {

   FILE *fp;

   char str[] = "This is a test";

    fp = fopen("file.txt", "w+");

   if(fp == NULL) {

      perror("Error opening file");

      return -1;

   }

  fseek(fp, 5, SEEK_SET);

   fwrite(str, sizeof(char), sizeof(str), fp);

   fclose(fp);

   return 0;

}

Dynamic Memory Allocation কি? উদাহারন সহযোগে ব্যাখ্যা কর ।

অ্যারে(Array) হ'ল একটি নির্দিষ্ট সংখ্যক মানের সংগ্রহকরন । একবার অ্যারের আকার ঘোষণা (Array Size Declaration) হয়ে গেলে আপনি এটিকে পরিবর্তন করতে পারবেন না।

কখনও কখনও আপনি ঘোষিত অ্যারের আকার(Array Size) অপর্যাপ্ত হতে পারে। এই সমস্যাটি সমাধান করার জন্য, Run Time -এ আপনি mannualy memory  allocation করতে পারেন। এটি  প্রোগ্রামিংয়ে (Programming) Dynamic Memory Allocation  নামে পরিচিত।

Dynamic Memory Allocation- এর জন্য  C Programming Language কতগুলি  Library Function ব্যবহার করা হয় এবং এগুলি "stdlib.h" নামক header file -এ defined করা থাকে। Library Function গুলি হল-

a) malloc() 

b) calloc()

 c)realloc()

 d) free


malloc() কি? উদাহারন সহযোগে ব্যাখ্যা কর ।

malloc() function-এর অর্থ হল- memory allocation- যা  নির্দিষ্ট সংখ্যক বাইটের মেমরির একটি ব্লক(Single block of memory) সংরক্ষণ করে।এটি void pointer return করে যার ফলে যে কোনও form-এর pointer-cast করা যায়। malloc() function ব্যবহার করলে মেমরি uninitialized অবস্থায় থাকে। 

Syntax: ptr= (castType*)malloc(size);

Example: ptr = (int*) malloc(10 * sizeof(int));

উপরিউক্ত উদাহারন থেকে বলতে পারি 10*4=40 byte size এর মেমরির একটি ব্লক বরাদ্দ (allocate) হয়েছে। এখানে বরাদ্দকৃত মেমরির প্রথম বাইট (First byte of allocated memory) -এর address কে point করে ptr

calloc() কি? উদাহারন সহযোগে ব্যাখ্যা কর ।

calloc() function-এর অর্থ হল- contiguous  allocation- যা  নির্দিষ্ট সংখ্যক বাইটের মেমরির অনেকগুলি ব্লক(multiple block of memory) সংরক্ষণ করে। calloc() function ব্যবহার করলে মেমরি প্রত্যেক টি বিট-এর মান শূন্য হয়ে যায়। 

Syntax: ptr= (castType*)calloc(n,size);

Example: ptr = (int*) calloc(5 ,sizeof(int));

উপরিউক্ত উদাহারন থেকে বলতে পারি মেমরিতে 5 ব্লক বরাদ্দ (allocate) হয়েছে যার প্রত্যেক টির আকার 5*4=20 byte

realloc() কি? উদাহারন সহযোগে ব্যাখ্যা কর ।

realloc()- re- allocation অর্থাৎ malloc()/ calloc() দ্বারা পূর্বে বরাদ্দকৃত মেমরির পুনরায় বৃদ্ধি অথবা হ্রাস করা।

Syntax: ptr= realloc(ptr,size);


free() কি? উদাহারন সহযোগে ব্যাখ্যা কর ।

free() -এই function টি ব্যবহার করলে malloc()/calloc() দ্বারা বরাদ্দকৃত মেমরি মুক্ত হয়। 

Syntax: free(ptr);

0comments

Post a Comment