অ্যারে realloc করতে পারেন, তাহলে কেন পয়েন্টার ব্যবহার করুন?

এই একটি পেশা প্লেসমেন্ট সাক্ষাত্কার আমি মুখোমুখি ছিল। তারা জিজ্ঞেস করেছিল যে আমরা আর্যকে পুনঃলোল করতে পারি কিনা, আমি হ্যাঁ বললাম। তারপর তারা জিজ্ঞাসা - তারপর কেন আমরা পয়েন্টার প্রয়োজন কারণ অধিকাংশ মানুষ কারণ এটি মেমরি স্থান কষা দেয়। আমি সন্তোষজনক উত্তর দিতে পারবেন না। যদি কোনও সংস্থার কোন সন্তোষজনক উত্তর দেওয়া যায়, তবে আমি বাধ্য হবো। উপরে বর্ণিত বিবৃতি বিপরীত হতে পারে যেখানে কোন অবস্থা উল্লেখ করুন।

ধন্যবাদ.

2

4 উত্তর

আপনি শুধুমাত্র একটি অ্যারে পুনঃনির্ধারণ করতে পারেন যা গতিশীলভাবে বরাদ্দ করা হয়েছিল। যদি এটি স্থায়ীভাবে বরাদ্দ করা হয়, তাহলে এটি পুনঃনির্ধারণ করা যাবে না [নিরাপদ]। *

পয়েন্টার মেমরিতে ডেটা ঠিকানা রাখে। তারা C ++ এবং malloc/সি সি-তে ফ্রি/নতুন অপারেটরগুলি ব্যবহার করে গতিশীলভাবে বরাদ্দ, বিতরণ, এবং পুনরায় বরাদ্দকরণ করা যেতে পারে।

আমি দৃঢ়তার সাথে সুপারিশ করব যে আপনি সি প্রোগ্রামিং ভাষা পড়েন Kernighan এবং রিচি এবং একটি কঠিন C + + টেক্সট মত গ্রাউন্ড থেকে C ++ উপরে </একটি> হার্বার্ট স্কিল্ট দ্বারা

ডায়নামিক মেমরি, পয়েন্টার, অফসেট, ইত্যাদি ব্যবহার করে এই দুটি ভাষাগুলি ব্যবহার করা সব মৌলিক। তারা কিভাবে কাজ করে তা না জেনে এবং তারা কেন বিদ্যমান তা সম্ভবত সম্ভাব্য নিয়োগকারীদের আপনাকে ঘুরিয়ে নেওয়ার একটি সম্ভাব্য কারণ হতে পারে।

* কম্পাইলার উচিত নয় আপনাকে স্থিরভাবে বরাদ্দ করা হয়েছে এমন কিছু পুনঃনির্ধারণ করা উচিত, কিন্তু যদি এটি না করে তবে আচরণটি অনির্ধারিত

8
যোগ
আমি তার এ্যানোটেটেড সি স্ট্যান্ডার্ড না দেখেছি - তাই আমি সরাসরি মন্তব্য করতে পারব না, কিন্তু আমি ক্লাসে গ্রাউন্ড বইটি ব্যবহার করেছি, এবং শিক্ষার্থীদের সত্যিই এই লেখাটি ব্যবহার করে 'এটি পেতে' পেয়েছি।
যোগ লেখক warren, উৎস
স্কিল্ডের সি + + তার 'এনাোটেড সি স্ট্যান্ডার্ড' এর চেয়ে ভালো?
যোগ লেখক Jonathan Leffler, উৎস

Phrasing একটি বিট অদ্ভুত, কিন্তু আমার মনে হয় ইন্টারভিউ প্রশ্ন ছিল একটি খোলা শেষ প্রশ্ন আপনি অ্যারে, পয়েন্টার, ডায়নামিক মেমরি বরাদ্দকরণ, ইত্যাদি সম্পর্কে জানতে কি আপনি ব্যাখ্যা করতে ডিজাইন করা হয়েছে। যদি আমি সাক্ষাত্কার ছিল আমি চাই প্রার্থীকে int * a = malloc (10 * সাইজ (int)) এবং এবং int [10]; এর মধ্যে পার্থক্যকে স্পষ্ট করে তুলতে। ফলোআপের প্রশ্নটি খুব ভালভাবে কথিত হয় না, তবে সম্ভবত একজন পয়েন্টার এবং একটি অ্যারের মধ্যে পার্থক্যের দিক থেকে প্রার্থীর নিন্দা করা এবং চিন্তাভাবনা ট্রেন বন্ধ করার প্রচেষ্টা ছিল।

5
যোগ

ঠিক আছে. আপনি একটি অ্যারে realloc করতে পারেন না যে statically ঘোষণা করা হয়েছে। পয়েন্টার ব্যবহার করার উদ্দেশ্যে (স্থায়ীভাবে ঘোষিত অ্যারের পরিবর্তে), যাতে আপনি স্থানটি পুনরায় লোড করতে পারেন। আমি মনে করি, টেকনিক্যালি সঠিক হতে, আপনি একটি পয়েন্টার পাশ করে এটি একটি স্থায়ী সংজ্ঞায়িত অ্যারে realloc পারে, কিন্তু আমি চাই না চাই। পয়েন্টারটি মেমোরির ক্ষেত্রে আচরণবিধি নির্ধারিত না হলে malloc দ্বারা বরাদ্দ করা হয় নি।

2
যোগ
Realloc ফাংশনটি আমাদের পূর্ববর্তী বরাদ্দকৃত এলাকার আকার বৃদ্ধি বা হ্রাস করতে দেয়। (সবচেয়ে সাধারণ ব্যবহার একটি এলাকা বৃদ্ধি করা হয়।) Exmple জন্য, আমরা একটি অ্যারের মধ্যে 512 উপাদান জন্য রুম বরাদ্দ যদি আমরা রানটাইম এ পূরণ কিন্তু যে এটি আমরা 512 টিরও বেশি উপাদান জন্য রুম প্রয়োজন, আমরা realloc কল করতে পারেন
যোগ লেখক iankits, উৎস
linux.die.net/man/3/realloc - এখনও সাহায্য করবে না স্থায়ীভাবে বরাদ্দ আইটেম
যোগ লেখক warren, উৎস

আমি কি সত্যিই পয়েন্টার ব্যবহার করে "বর্জিত মেমরি" বুঝতে পারছি না Realloc ফাংশন: -

void *realloc(void *ptr, size_t size);

একটি প্যারামিটার হিসাবে মাপ পরিবর্তন একটি মেমরি পয়েন্টার লাগে। এছাড়াও, উদাহরণস্বরূপ রেফারেন্স দ্বারা ক্ষণস্থায়ী ডায়নামিক মেমরির চেয়ে পয়েন্টারগুলির জন্য প্রচুর ব্যবহার রয়েছে।

1
যোগ
"বর্জ্য মেমরি" অর্থ এই উদ্দেশ্যে যে, int * ra = malloc (10 × sizeof (int)); ফলাফল int int থেকে আরো স্টোরেজ ব্যবহার [10]; আপনার malloc বাস্তবায়নের ওভারহেড কারণে। কিন্তু প্রযোজ্য যেখানে স্ট্যাকের এ arrays ব্যবহার করার জন্য ভাল কারণ আছে।
যোগ লেখক Steve Jessop, উৎস
ওহ, এবং যখন একটি অ্যারের একটি struct দ্বারা প্রতিনিধিত্বকারী কিছু থাকে, তখন স্পষ্ট মেমরি "বর্জ্য" থাকে যা স্ট্রাক্টের অ্যারে এম্বেড করা এবং সদস্যের নামের দ্বারা অ্যাক্সেস করার পরিবর্তে অ্যারের একটি পয়েন্টার সংরক্ষণ করে, অতিরিক্ত আকারের (অকার্যকর) ব্যবহার করে *) বাইট
যোগ লেখক Steve Jessop, উৎস