#include <stdio.h>
#include <stdlib.h>

int main()
{
    int arr[100];

    int *ptr;
    ptr = (int *)malloc(100 * sizeof(int));
    ptr[1] = 5;

    printf("%d\n", ptr[1]);

    free(ptr);

    return 0;
}

এখানে *ptr কি arr[100] অ্যারেকে পয়েন্ট করছে? নাকি *ptr একটা অ্যারের মতো কাজ করছে? যদি *ptr, অ্যারে arr[100]-কে পয়েন্ট করে থাকে তাহলে সেটা কীভাবে?

asked 19 Jul, 14:33

Michael's gravatar image

Michael
213

edited 20 Jul, 05:50

Mosharraf%20Hosain's gravatar image

Mosharraf Hosain ♦
53118


না, এখানে ptr, arr-কে পয়েন্ট করছে না, বরং একটা নির্দিষ্ট মেমোরি লোকেশন, যেখান থেকে শুরু হয়ে 100টা ইন্টিজারের জন্য মেমোরি অ্যালোকেট করা হয়েছে, সেই লোকেশনকে পয়েন্ট করছে। যেহেতু মেমোরিতে পরপর ইন্টিজারগুলো আছে, তাই ইনডেক্স ব্যবহার করে একসেস করা যাচ্ছে।

নিচের প্রোগ্রামটা কম্পাইল করে রান করে দেখতে হবে এবং একটু চিন্তাভাবনা করতে হবে -

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int arr[100];

    int *ptr;
    ptr = (int *)malloc(100 * sizeof(int));
    ptr[1] = 5;
    ptr[2] = 7;
    ptr[3] = 9;

    printf("%d, %d, %d, %d\n", ptr[1], ptr[2], ptr[3], ptr[4]);

    printf("%d, %d, %d\n", *(ptr+1), *(ptr+2), *(ptr+3));

    free(ptr);

    return 0;
}
permanent link

answered 20 Jul, 01:24

Tamim%20Shahriar%20Subeen's gravatar image

Tamim Shahriar Subeen ♦♦
6.1k1126

এখানে arr কে allocate করা কি খুব প্রয়োজন? আমি যদি arr use না করে directly ptr কে allocate করি তাহলে কি প্রবলেম হবে? নির্দিষ্ট array ব্যবহার করার না করার সুবিধা অসুবিধা কি?

(20 Jul, 02:55) Michael

@Michael, না কোনো প্রয়োজনই নেই । যেহেতু এখানে অ্যারের কোনো কাজ নেই তাই arr-এর কোনো দরকারও নেই ।

int arr[100];

লাইনটার সামনে // বসিয়ে কোডটা রান করলেই সব পরিষ্কার হয়ে যাবে ।

ছোটখাট প্রোগ্রামে যেখানে মেমোরি নিয়ে কোনো চিন্তা নেই সেখানে ডায়নামিক মেমোরি অ্যালোকেশন, পয়েন্টার ব্যবহার না করে সরাসরি অ্যারে ব্যবহার করাই ভালো (এবং সোজা) ।

(20 Jul, 06:06) Mosharraf Hosain ♦
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×394
×56
×17
×5
×4

question asked: 19 Jul, 14:33

question was seen: 140 times

last updated: 20 Jul, 06:06