একটি পরিবর্তনশীল এবং একটি মেমরি অবস্থানের মধ্যে পার্থক্য কী? [বন্ধ]


38

সম্প্রতি আমি পয়েন্টারগুলিকে ফ্ল্যাশকার্ড হিসাবে ভিজ্যুয়াল উপায়ে ব্যাখ্যা করার চেষ্টা করেছি।

প্রশ্ন 001: এটি কম্পিউটার মেমরির একটি অবস্থান অঙ্কন। এটি ঠিক যে এটির ঠিকানা 0x23452? কেন?

এখানে চিত্র বর্ণনা লিখুন

উত্তর: হ্যাঁ, কারণ 0x23452কম্পিউটারটি এই অবস্থানটি কোথায় খুঁজে পেতে পারে তা বর্ণনা করে।


প্রশ্ন 002: এটি কি সত্য যে চরিত্রটি bমেমরির অবস্থানের ভিতরে সঞ্চয় করা হয় 0x23452? কেন?

এখানে চিত্র বর্ণনা লিখুন

উত্তর: না, কারণ চরিত্রটি aআসলে এটির ভিতরে সঞ্চিত থাকে।


প্রশ্ন 003: এটি কি সত্য যে কোনও পয়েন্টার মেমরির অবস্থানের ভিতরে সঞ্চয় করা হয় 0x23452? কেন?

এখানে চিত্র বর্ণনা লিখুন

উত্তর: হ্যাঁ, কারণ মেমরির অবস্থানের ঠিকানাটি এর 0x34501ভিতরে সঞ্চিত রয়েছে।


প্রশ্ন 004: এটি কি সত্য যে কোনও পয়েন্টার মেমরির অবস্থানের ভিতরে সঞ্চয় করা হয় 0x23452? কেন?

এখানে চিত্র বর্ণনা লিখুন

উত্তর: হ্যাঁ, কারণ অন্য মেমরির অবস্থানের ঠিকানাটি এর ভিতরে সঞ্চিত রয়েছে।


এখন যে অংশটি আমাকে চিন্তিত করেছে। একজন সফটওয়্যার ইঞ্জিনিয়ার আমাকে এভাবে নির্দেশ করেছেন:

পয়েন্টার হ'ল একটি ভেরিয়েবল যার মান অন্য ভেরিয়েবলের মেমরি ঠিকানা।

আমি আপনাকে যে চারটি ফ্ল্যাশকার্ড দেখিয়েছি তার উপর ভিত্তি করে আমি পয়েন্টারগুলিকে কিছুটা ভিন্ন উপায়ে সংজ্ঞায়িত করব:

পয়েন্টার হ'ল একটি মেমরি অবস্থান যার মান অন্য মেমরির অবস্থানের মেমরি ঠিকানা।

এটি কি নিরাপদে বলা যায় যে একটি পরিবর্তনশীল একটি স্মৃতি অবস্থানের মতো একই জিনিস?

যদি না হয়, তবে কে ঠিক আছে? একটি পরিবর্তনশীল এবং একটি মেমরি অবস্থানের মধ্যে পার্থক্য কী?


37
একটা অন্তর্নিহিত ধৃষ্টতা এখানে সবাই সেই ছবি পড়া আপনার অভিপ্রায় যে বাক্সের নীচে হেক্সাডেসিমেল সংখ্যাকে একটি মেমরি ঠিকানা হল জানতে পারবে, এবং যে a, 0x23453nilতাদের ভিতরে স্টাফ মান হয়। এটি আপনার কাছে সুস্পষ্ট বলে মনে হতে পারে তবে those ক্ষেত্রগুলি কীভাবে সংজ্ঞায়িত করা হয়েছে তা না দেখেই আমি এই প্রশ্নগুলির সিদ্ধান্তমূলক উত্তর দিতে স্বাচ্ছন্দ্যবোধ করব না। aদ্বিতীয় চিত্রটিতে একটি চরিত্র, একটি স্ট্রিং (যদি তারা কোনও আলাদা হয়) বা কোনও ভেরিয়েবলের নাম কিনা তা জানার সত্যিই উপায় নেই । এটি যদি একটি স্ট্রিং হয়, তবে nilএটিও একটি স্ট্রিং? বা একটি "নাল" মান?
ইলক্কাচু

39
প্রশ্ন 1 একটি খারাপ প্রশ্ন। এটি এমন একটি বিষয় যা আপনার অন্যান্য প্রশ্নের উত্তর দেওয়ার আগে পাঠকদের বলার দরকার। একটি প্রশ্নের পরিবর্তে, এটি পাঠকের কাছে তথ্য দেওয়া উচিত: "নিম্নলিখিত প্রশ্নের মধ্যে বাক্সগুলি মেমরির অবস্থান এবং নীচে হেক্স নম্বরগুলি তাদের ঠিকানা"।
26 ই

15
প্রসঙ্গ 3 বিবেচনা করে উত্তর দেওয়া অসম্ভব। মেমরিতে সঞ্চিত মানটি কীভাবে অ্যাপ্লিকেশন স্তরে ব্যাখ্যার / ব্যবহৃত হচ্ছে তা বাইট স্তরে বলার উপায় নেই।
26 ই

6
লক্ষ্যণযোগ্য: আপনি এখানে যা লিখছেন তা প্রতিটি সি বা সি ++ এর জন্য সত্য তবে মূলত যে কোনও ভাষার স্পষ্ট পয়েন্টার রেফারেন্সিং / ডেরেফারেন্সিং নেই তার পক্ষে মিথ্যা। ভ্যালিয়েবলের পুরো রূপকটি স্লট যা একটি ভাষার জন্য পাইথন, বা জাভা, বা সি #, অথবা রুবি, বা জাভাস্ক্রিপ্ট, বা অন্য অনেকগুলি জন্য বিরতিতে পরিণত হয় যেখানে অ্যাসাইনমেন্টটি অনুলিপিটি অনুলিপি না করেই কোনও অবৈধ বিন্দুতে পরিণত করে , এবং অবজেক্টে রূপান্তরগুলি সমস্ত ভেরিয়েবলের দিকে এটি দেখানোর মাধ্যমে দৃশ্যমান। পাইথনের ডকুমেন্টেশনগুলি এই কারণে বস্তুগুলিতে ঝুলন্ত নেমটাগ হিসাবে ভেরিয়েবলগুলির বিকল্প রূপক ব্যবহার করে।
মার্ক অ্যামেরি

19
বিটিডাব্লু, এবং যদি আপনি ইতিমধ্যে এটি বুঝতে পেরেছেন তবে আমাকে ক্ষমা করুন, তবে মনে হচ্ছে এটি বিভ্রান্তির একটি বিষয় হতে পারে - এই "0x23452" স্বরলিপিটি হেক্সাডেসিমাল ফর্ম্যাটে কোনও সংখ্যাকে বোঝানোর উপায়, এবং এটি কেবল সুবিধার জন্য করা হয়েছে। তবে এটি কেবল একটি সংখ্যা - কোনওভাবেই 0x উপসর্গটি এটি নির্দেশক হিসাবে বোঝায় না যে মেমরিতে সঞ্চিত রয়েছে তা আক্ষরিক অর্থে একটি অর্থহীন সংখ্যা (আপনি সাধারণ দশমিক পূর্ণসংখ্যার সাথে মেমরির অবস্থানগুলি লেবেল করতে পারেন)। অর্থটি (অর্থাত্, সংখ্যাটি কীভাবে ব্যাখ্যা করা উচিত) ভাষা থেকে আসে - ভেরিয়েবলের ধরণ এবং এটি কীভাবে ব্যবহৃত হয়।
ফিলিপ মিলোভানোভিć

উত্তর:


69

একটি ভেরিয়েবল একটি লজিকাল কনস্ট্রাক্ট যা একটি অ্যালগোরিদমের অভিপ্রায় যায়, অন্যদিকে মেমরির অবস্থান একটি শারীরিক গঠন যা একটি কম্পিউটারের ক্রিয়াকলাপ বর্ণনা করে। সাধারণভাবে বলতে গেলে, একটি প্রোগ্রাম কার্যকর করার জন্য একটি ভেরিয়েবলের লজিকাল ধারণা এবং কম্পিউটারের সঞ্চয়স্থানের মধ্যে ম্যাপিং রয়েছে (সংকলক উত্পন্ন)।

(এমনকি অ্যাসেম্বলি ভাষার ক্ষেত্রেও আমাদের অ্যালগরিদম এবং অভিপ্রায় এবং (শারীরিক) মেমরির অবস্থানগুলিতে (যৌক্তিক) ভেরিয়েবলের ধারণা রয়েছে যদিও তারা সমাবেশে আরও জটিল হয়)

একটি ভেরিয়েবল একটি উচ্চ (এর) স্তর ধারণা। একটি ভেরিয়েবল হয় অজানা প্রতিনিধিত্ব করে (যেমন গণিতে, বা প্রোগ্রামিং অ্যাসাইনমেন্ট হিসাবে) বা কোনও স্থানধারক যা একটি মান (যেমন প্রোগ্রামিং: প্যারামিটারে) হিসাবে প্রতিস্থাপিত হতে পারে।

একটি স্মৃতি অবস্থান নিম্ন (এর) স্তর ধারণা is কোনও মেমরির অবস্থানটি কোনও ভেরিয়েবলের মান সঞ্চয় করতে কখনও কখনও কোনও মান সঞ্চয় করতে ব্যবহৃত হতে পারে। তবে কিছু ভেরিয়েবলের মান সঞ্চয় করার জন্য একটি সিপিইউ রেজিস্ট্রার হ'ল অন্য উপায়। সিপিইউ রেজিস্টারগুলিও কম (এর) স্তর সঞ্চয় স্থান রয়েছে তবে তাদের ঠিকানা নেই, কেবল নাম নেই বলে এগুলি মেমরির অবস্থান নয়।

কিছু দিক থেকে, একটি পরিবর্তনশীল হ'ল প্রোগ্রামটির অভিপ্রায় প্রকাশের জন্য বিমূর্তকরণের একটি প্রক্রিয়া, অন্যদিকে মেমরির অবস্থান প্রক্রিয়াজাতকরণের পরিবেশের একটি শারীরিক সত্তা যা স্টোরেজ এবং পুনরুদ্ধার সরবরাহ করে।

প্রশ্ন 003: এটি কি সত্য যে কোনও পয়েন্টার মেমরি অবস্থান 0x23452 এর ভিতরে সঞ্চয় করা হয়? কেন?

আমরা নিশ্চিতভাবে বলতে পারি না। ঠিক আছে কারণ সেখানে কোনও মান রয়েছে যা ঠিকানা হিসাবে কাজ করবে, তার মানে এই নয় যে এটি ঠিকানা, এটি পরিবর্তে পূর্ণসংখ্যা (দশমিক) হতে পারে 144466। আমরা মানগুলি কীভাবে সংখ্যায় প্রদর্শিত হয় তার ভিত্তিতে মূল্যবোধের ব্যাখ্যা নিয়ে অনুমান করতে পারি না।

প্রশ্ন 004: এটি কি সত্য যে কোনও পয়েন্টার মেমরি অবস্থান 0x23452 এর ভিতরে সঞ্চয় করা হয়? কেন?

এটি আসলেই একটি বিজোড় প্রশ্ন। তারা বাক্সগুলির উপর ভিত্তি করে কিছু অনুমানের প্রত্যাশা করে, তবে, লক্ষ্য করা যাক যে প্রতিটি বাক্সের জন্য ঠিকানাগুলি 1 টি বৃদ্ধি পেয়েছে। যে কোনও আধুনিক কম্পিউটারে, এর অর্থ হ'ল প্রতিটি বাক্স একটি বাইট ধরে রাখতে পারে - বাইট অ্যাড্রেসিয়েটেবিলিটি এখন কয়েক দশক ধরে। তবে বাইটটি কেবল 8-বিট এবং 0 থেকে 255 (স্বাক্ষরযুক্ত স্বীকৃত মানগুলির জন্য) হতে পারে; তবুও তারা এই ঠিকানাগুলির মধ্যে একটিতে সঞ্চিত একটি বৃহত্তর মান দেখায়, তাই খুব সন্দেহজনক। (এটি যদি কোনও শব্দ সম্বোধনকারী মেশিন হত তবে এটি কাজ করতে পারে তবে এটি এমনটি বলে না, এবং কিছু শিক্ষামূলক মেশিন যদিও আজ রয়েছে খুব কম) machines

আমি আপনাকে যে চারটি ফ্ল্যাশকার্ড দেখিয়েছি তার উপর ভিত্তি করে আমি পয়েন্টারগুলিকে কিছুটা ভিন্ন উপায়ে সংজ্ঞায়িত করব:

পয়েন্টার হ'ল একটি মেমরি অবস্থান যার মান অন্য মেমরির অবস্থানের মেমরি ঠিকানা।

এই চিন্তাভাবনাটি সঠিক হওয়ার মতো পরিস্থিতিতে রয়েছে, আপনি এখানে রূপকগুলি মিশ্রিত করছেন। একটি ভেরিয়েবলের ধারণাটি অ্যালগরিদম এবং তার উদ্দেশ্য সম্পর্কে যায় - সমস্ত ভেরিয়েবলের মেমরির অবস্থান রয়েছে তা ধরে নেওয়ার প্রয়োজন নেই। কিছু ভেরিয়েবল (বিশেষত অ্যারে) এর মেমোরি অবস্থান থাকে কারণ মেমরি অবস্থানগুলি সম্বোধন সমর্থন করে (যেখানে সিপিইউ রেজিস্টারগুলিকে কেবল সূচিযুক্ত না করেই নামকরণ করা যেতে পারে)।

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


4
এমনকি 8-বিট বাইটগুলি এখনও সর্বজনীন নয়।
উত্সাহক

14
forসংকলক লুপটি সম্পূর্ণরূপে আনারোল করার সিদ্ধান্ত নিলে @ জিমি জেমস লুপ সূচীর ক্ষেত্রে বিবেচনা করুন । উত্পাদিত আউটপুট কোডের কোথাও (এটি সমাবেশ বা মেশিন কোড বা বাইট কোড) কোনও মেমরির অবস্থান নেই যেখানে লুপের কাউন্টারটি সঞ্চয় হয়ে যায়। তবে এটি এখনও একটি পরিবর্তনশীল।
dmckee

4
@ জিমি জেমস, অনিবন্ধিত-লুপ পয়েন্টারের ক্ষেত্রে, তবে হ্যাঁ, যদি আপনার কোডটি আসলে কাউন্টারটির মান ব্যবহার করে তবে এটি অন্য কোথাও লোড করতে হবে , তবে (ক) সেই জায়গাটি নিবন্ধক হতে পারে এবং (খ) কেন নথিভুক্ত লুপের প্রতিটি পুনরাবৃত্তিতে এটি একই অবস্থান হতে হবে তা নীতিগত কোনও কারণ নেই ।
সলোমন আস্তে

3
যদি লুপটি sourceসমতুল্য দৈর্ঘ্যের অ্যারেটি সমান দৈর্ঘ্যের অ্যারে অনুলিপি করার মতো কিছু করে থাকে তবে destএকটি লুপ কোডড for (int i=0; i<8; ++i) dest[i] = source[i];হয়ে যায় যা বারবার dest++ = source++;সংখ্যার পুনরাবৃত্তির সমতুল্য কিছুতে সংকলন করতে পারে । লুপ কাউন্টারে নিজেই প্রমাণের কোথাও নেই (এমনকি নিবন্ধেও নেই), এবং কেবল পুনরাবৃত্তির সংখ্যা আপনাকে লুপের অবস্থা সম্পর্কে বলে।
ডিএমকেকে

2
সি এর মতো ভাষাগুলি দ্বারা এই পার্থক্যটি কিছুটা বিভ্রান্ত হয় যার শব্দার্থবিজ্ঞানের ঘনিষ্ঠভাবে মেশিনের বিমূর্ততার উপর ভিত্তি করে যার স্মৃতিতে সংখ্যাযুক্ত অবস্থান রয়েছে of
মাইকেল কেএ

20

এটি কি নিরাপদে বলা যায় যে একটি পরিবর্তনশীল একটি স্মৃতি অবস্থানের মতো একই জিনিস?

পরিবর্তনীয় এবং মেমরির অবস্থান দুটি পৃথক বিমূর্ত স্তর স্তরে দুটি বিমূর্ততা। পরিবর্তনশীল এবং পয়েন্টারগুলি কোড / ভাষা স্তরে উচ্চ স্তরের ধারণা, মেমরির অবস্থানটি মেশিন স্তরে নিম্ন স্তরের ধারণা। একবার কোনও কোড এক্সিকিউটেবলের মধ্যে সংকলিত হয়ে গেলে আর কোনও ভেরিয়েবল নেই। এই পদ্ধতিতে মেমরির অবস্থান এবং ভেরিয়েবল সম্পর্কে কথা বলার চেষ্টা করা একটি বিভ্রান্তিকর ত্রুটি।

একটি পরিবর্তনশীল মেমরি ব্যবহার করে প্রয়োগ করা যেতে পারে, তবে সবসময় নয় যে সংকলক কোনও গণনা অনুকূলিত করতে পারে এবং সম্পূর্ণভাবে কোনও ভেরিয়েবল সম্পর্কিত সমস্ত গণনাগুলি রেজিস্টারে করতে পারে, বা এটি একক ভেরিয়েবলকে একাধিক মেমরি অবস্থানগুলিতে স্থাপন করতে পারে বা এটি একটি একক স্মৃতি ব্যবহার করতে পারে একাধিক ভেরিয়েবলের জন্য অবস্থান।

পয়েন্টার হ'ল একটি মেমরি অবস্থান যার মান অন্য মেমরির অবস্থানের মেমরি ঠিকানা।

এই সিরিজ ফ্ল্যাশকার্ডটি এত বিভ্রান্ত, এগুলি ঠিক ঠিক নয়, তবে তারা ভুলও নয়।


1
Once a code had been compiled into an executable, there's no longer any variables.এটাই আমি যুক্তিযুক্তভাবে একমত না। এটি সঠিক যে আপনি যেমনটি জানেন তেমন আপনার ভেরিয়েবল (যেমন সেই নাম অনুসারে) আর বিদ্যমান নেই, তবে আপনার ফ্রেসিংয়ের সাহায্যে বোঝা যাচ্ছে যে সংকলিত এক্সিকিউটেবল কেবল মেমরি ঠিকানা ব্যবহার করে। এটি সঠিক নয়। আপনার সংকলিত-তবে-এক্সিকিউটেবল এক্সিকিউটেবলের কোনও ধারণা নেই যে এটি কার্যকর হলে কোন মেমরিটি এটি ব্যবহার করবে। সংকলন সম্পাদনযোগ্যটির অভ্যন্তরে একটি চলক (যেমন কোনও মেমরি ঠিকানার যা পুনরায় ব্যবহারযোগ্য রেফারেন্সে নির্ধারিত হবে) এর ধারণাটি এখনও বিদ্যমান exists
ফ্ল্যাটার

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

16

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

স্মৃতি অবস্থানে একটি হার্ডওয়্যার ধারণা হয় । এগুলি ভার্চুয়াল / শারীরিক মেমরির একটি স্থান নির্দেশ করে। প্রতিটি মেমরি অবস্থানের ঠিক একটি শারীরিক ঠিকানা এবং কোনও পরিমাণ ভার্চুয়াল ঠিকানা রয়েছে যা এটি ব্যবহারের জন্য ব্যবহার করা যেতে পারে। তবে সর্বদা প্রতিটি মেমরির স্থানে হ'ল এক বাইট সংরক্ষণ করা হয়।

পয়েন্টারগুলি একটি বিশেষ ধরণের মানকিছু বলতে পয়েন্টার বলা কিছু ধরণের কথা বলার অনুরূপ double। এটি কতগুলি বিট মানটির জন্য ব্যবহৃত হয় এবং সেই বিটগুলি কীভাবে ব্যাখ্যা করা হয় তা বোঝায়, তবে এর অর্থ এই নয় যে এই মানটি একটি ভেরিয়েবেলে সংরক্ষণ করা হয়, না এর অর্থ এই নয় যে এই মানটি মেমরিতে সঞ্চয় করা আছে।


সি-তে একটি উদাহরণ দেওয়ার জন্য: যখন আমার কাছে 2D অ্যারে থাকে int foo[6][7];এবং আমি এর একটি উপাদানটি অ্যাক্সেস করি foo[1][2]তখন fooএকটি পরিবর্তনশীল যা অ্যারে ধারণ করে। যখন fooএই প্রসঙ্গে ব্যবহৃত হয়, এটি অ্যারের প্রথম উপাদানটিকে পয়েন্টারে পরিণত করা হয়। এই পয়েন্টারটি কোনও ভেরিয়েবলে সংরক্ষণ করা হয় না, এটি মেমরির মধ্যেও সংরক্ষণ করা হয় না, এর মানটি কেবলমাত্র সিপিইউর একটি রেজিস্টারে তৈরি করা হয়, ব্যবহৃত হয় এবং তারপরে ভুলে যায়। তেমনি, foo[1]এই প্রসঙ্গে এই এক্সপ্রেশনটি অন্য পয়েন্টারে পরিণত হয়, যা আবার পরিবর্তনশীল নয়, স্মৃতিতে সংরক্ষণ করা হয় না, তবে সিপিইউতে গণিত হয়, ব্যবহৃত হয় এবং ভুলে যায়। তিনটি ধারণা পরিবর্তনশীল , মেমরি অবস্থান এবং পয়েন্টার সত্যিই তিনটি পৃথক ধারণা।


বিটিডব্লিউ, আমি সত্যিই বোঝাতে চাইছি "প্রতিটি স্মৃতিতে ঠিক সেখানে একটি বাইট থাকে"। প্রায় পঞ্চাশ বছর আগে কম্পিউটিংয়ের প্রস্তর যুগে এটি ছিল না, তবে এটি বর্তমানে কার্যত সমস্ত হার্ডওয়্যার ব্যবহার করে যা এটি ব্যবহার করে। যখনই আপনি একটি বাইটের চেয়ে বড় মেমরির কোনও মান সঞ্চয় করেন, আপনি আসলে বেশ কয়েকটি ধারাবাহিক মেমরি অবস্থান ব্যবহার করছেন। অর্থাৎ (বড় এন্ডিয়ান বাইট ক্রম ধরে ধরে) 0x01234567 নম্বরটি মেমরি হিসাবে সংরক্ষণ করা হয়

+------+------+------+------+
| 0x01 | 0x23 | 0x45 | 0x67 |
+------+------+------+------+
    ^      ^      ^      ^
    |      |      |      |
 0x4242 0x4243 0x4244 0x4245

(এক্স 86 আর্কিটেকচারের মতো লিটল এন্ডিয়ান মেশিনগুলি বিটগুলি বিপরীতে সংরক্ষণ করে) আপনি মেমোরি সেলটি দেখে বলতে পারবেন না: "ওহ, এটি পয়েন্টার!" আপনি যখন স্মৃতিতে তাকান তখন আপনি সর্বদা কেবল বাইটগুলি দেখতে পান


একটানা মেমরি লোকেশনগুলির একটি গোষ্ঠী কখন শুরু হয় এবং শেষ হয় তা কম্পিউটার কীভাবে জানতে পারে?
প্রগতি

6
@ প্রোগনার এটি করেন না। এটি প্রদত্ত নির্দেশাবলী অনুসারে মেমরির বাইটগুলি ব্যাখ্যা করে। এই নির্দেশাবলী এছাড়াও নিজের বাইট ক্রম ছাড়া কিছুই কিছুই সংরক্ষণ করা হয়। সিপিইউতে একটি নির্দেশনা রাখে এমন একটি বাইট, একটি বাইট যা একটি অক্ষর ধারণ করে এবং একটি বাইট যা কিছু ভাসমান পয়েন্ট বিট ধারণ করে তার মধ্যে কেবলমাত্র পার্থক্য হ'ল এই বাইটটি কীভাবে ব্যবহার করার নির্দেশ দেওয়া হয়েছিল। যদি বাইটটি আনা হয় কারণ প্রোগ্রামটি এতে কাউন্টারকে নির্দেশ করে তবে এটি নির্দেশ হিসাবে ব্যবহৃত হয়। যদি এটি আনা হয় কারণ কোনও নির্দেশনা এটি ফ্লোট রেজিস্টারে লোড করতে বলে, এটি ভাসমান পয়েন্ট ডেটা হিসাবে ব্যবহৃত হয়।
প্রচারক

7
@ প্রোগনার এটি প্রকৃতপক্ষে ভন-নিউমান আর্কিটেকচারের মূল উদ্ভাবন ছিল: একই স্মৃতিতে নির্দেশাবলী এবং ডেটা উভয়ই সংরক্ষণ করার জন্য নির্দেশিকাগুলি ডেটা পরিবর্তন করার অনুমতি দেয় যা পরে আরও নির্দেশাবলী হিসাবে কার্যকর করা হয়। এটি স্ব-সংশোধনকারী কোডকে অনুমতি দিয়েছে, তবে এটি সিস্টেমের কার্নেলটিকে কিছু প্রোগ্রাম মেমোরিতে লোড করতে দেয় এবং তারপরে সিপিইউকে সেই প্রোগ্রামটি চালানোর জন্য বলে। ভন-নিউমানের আগে, জুস মেশিনগুলির মতো কম্পিউটারগুলি তাদের চ্যানেলটির মাধ্যমে তাদের নির্দেশাবলী পেয়ে যেত যেগুলি তারা পরিচালিত তথ্য থেকে সম্পূর্ণ স্বাধীন ছিল।

5

আমাকে আপনার আসল প্রশ্নে ফোকাস করতে দাও - "কে ঠিক?" এই দুটি বিবৃতি তুলনা যখন:

  • পয়েন্টার হ'ল একটি ভেরিয়েবল যার মান অন্য ভেরিয়েবলের মেমরি ঠিকানা
  • পয়েন্টার হ'ল একটি মেমরি অবস্থান যার মান অন্য মেমরির অবস্থানের মেমরি ঠিকানা।

এর উত্তর কিছুই নয় । প্রথমটি একটি "অন্য ভেরিয়েবলের মেমরি ঠিকানা" সম্পর্কে কথা বলে, তবে ভেরিয়েবলগুলির অগত্যা মেমরি অ্যাড্রেস থাকে না, যেমন অন্যান্য উত্তর ইতিমধ্যে ব্যাখ্যা করেছে। দ্বিতীয়টি "পয়েন্টারটি একটি মেমরি অবস্থান" বলে উল্লেখ করে, তবে পয়েন্টারটি আক্ষরিক অর্থে কেবল একটি সংখ্যা যা কোনও ভেরিয়েবলে সংরক্ষণ করা যেতে পারে তবে আগের মতো কোনও ভেরিয়েবলের মেমরি ঠিকানা নেই necess

আরও সুনির্দিষ্ট বক্তব্যের জন্য কয়েকটি উদাহরণ:

  • "একটি পয়েন্টার এমন একটি সংখ্যা যা কোনও মেমরি অবস্থানের মেমরি ঠিকানা উপস্থাপন করে" বা,

  • "একটি পয়েন্টার ভেরিয়েবল একটি পরিবর্তনশীল যার মান একটি মেমরি অবস্থানের মেমরি ঠিকানা" "

  • "একটি মেমরি ঠিকানা কোনও মেমোরি অবস্থানের মেমরি ঠিকানা উপস্থাপন করে এমন একটি পয়েন্টার ধরে রাখতে পারে।"

নোট কখনও কখনও "পয়েন্টার" শব্দটি "পয়েন্টার ভেরিয়েবল" এর শর্টকাট হিসাবে ব্যবহৃত হয়, যা ঠিক ততক্ষণ ঠিক থাকে যতক্ষণ না এটি বিভ্রান্তির দিকে না যায়।


আপনি "অন্য "টিকে" এ "তে পরিবর্তন করতে পারেন কারণ কোনও পয়েন্টার নিজেই নির্দেশ করতে পারে।
পিটার বি

@ পিটারবি: নিট্টি, নিতি ;-) নিশ্চিত না যে এটি সত্যিই আরও স্পষ্ট করে তোলে কিনা, যেহেতু আমি কেবলমাত্র মূল শব্দটিকে সত্যিকার অর্থে ডিগ্রীতে পরিবর্তন করতে চেয়েছিলাম যাতে সেগুলি বোধগম্য করে তোলে। কিন্তু হায়, আমি সম্পাদনা করেছি।
ডক ব্রাউন

সত্যি কথা বলতে গেলে, যদি আপনি সেই নাইটপিকি পান তবে "পয়েন্টারটি আক্ষরিক অর্থে কেবল একটি সংখ্যা" হয় না ঠিক হয়, আসলে পয়েন্টার একটি শনাক্তকারী একটি সংখ্যাকে পুনরায় উল্লেখ করে;) অথবা কমপক্ষে আমাদের এগুলির জন্য ভাষার নির্দিষ্টকরণগুলি জানতে হবে বিবরণ।
জায়েবিস

2
পয়েন্টার হ'ল একটি মান (সংখ্যাটি ইতিমধ্যে কিছু বাস্তবায়নের ক্ষেত্রে খুব নির্দিষ্ট some নাল পয়েন্টার, বন্য পয়েন্টার এবং জঞ্জাল পয়েন্টারগুলিও সম্ভবত রয়েছে, যদিও এর কিছু (বা এমনকি সমস্ত!) ব্যবহৃত ভাষার দ্বারা বাতিল হতে পারে।
উত্সাহক

2
@ উত্সাহক: আপনি ঠিক বলেছেন, তবে আমি মনে করি একটি নম্বর হিসাবে একটি পয়েন্টারের মানসিক মডেল এই প্রশ্নের উদ্দেশ্যটির জন্য যথেষ্ট ভাল। সুতরাং আসুন সহজ জিনিস রাখা যাক।
ডক ব্রাউন

5

আমি অবশ্যই বলব না যে পয়েন্টারটি একটি ঠিকানা রয়েছে এমন একটি মেমরি অবস্থান। একটির জন্য, আমি এমন কোনও স্থাপত্য সম্পর্কে সচেতন নই যেখানে 0x23453একক বাইটে ফিট করতে পারে in :) এমনকি যদি আপনি বাইট / শব্দের পার্থক্য হ্যান্ডওয়েভ করেন, তবুও আপনার সমস্যা রয়েছে যে প্রতিটি স্মৃতিতে একটি ঠিকানা রয়েছে। ঠিকানাগুলি কেবল সংখ্যা, এবং মেমরির বিষয়বস্তুগুলি কেবল সংখ্যা।

আমি মনে করি এখানে কৌশলটি হ'ল "পয়েন্টার" মানুষের অভিপ্রায় বর্ণনা করে, স্থাপত্যের কোনও বিশেষ বৈশিষ্ট্য নয়। এটি "চরিত্র" বা "স্ট্রিং" কীভাবে মেমরির মধ্যে দেখতে পারা যায় তা কোনও মিল নয় - এগুলি কেবলমাত্র সংখ্যা, তবে তারা স্ট্রিং হিসাবে কাজ করে কারণ তাদের সাথে এইরকম আচরণ করা হচ্ছে। "পয়েন্টার" অর্থ একটি ঠিকানা হিসাবে ব্যবহার করার উদ্দেশ্যে উদ্দিষ্ট মান to

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

আমি মনে করি একটি ভাল তুলনা কোনও ইউআরএল এর সাথে হতে পারে, যা আপনাকে কিছু ডেটা কোথায় সন্ধান করতে পারে তা বলে দেয় , তবে ডেটা নিজেই নয়। আমার কথা শুনুন:

  • আপনি খুব কমই গ্রাহ্য কোন URL আসলে হয় ; এগুলির বেশিরভাগ অংশ নামের সাথে লিঙ্কে বিভক্ত হয়। ইউআরএল কোনও পৃষ্ঠায় কীভাবে ফলাফল আসে ঠিক তা না জেনে প্রচুর লোক ইন্টারনেট ব্যবহার করে ; কিছু লোক সম্পূর্ণরূপে ইউআরএল সম্পর্কে অবজ্ঞাত।

  • প্রতিটি স্ট্রিং কোনও ইউআরএল হয় না বা ইউআরএল হিসাবে ব্যবহার করার উদ্দেশ্যে।

  • আপনি যদি কোনও বোগাস ইউআরএল, বা এমন একটি পৃষ্ঠা যা দেখার আগে চেষ্টা করেছিলেন তবে এটি মুছে ফেলা হয়েছে তবে আপনি একটি ত্রুটি পান।

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

  • আপনি যদি কোনও ওয়েব পৃষ্ঠা তৈরি করেন এবং আপনি অন্য কোনও ওয়েব পৃষ্ঠায় ডেটা উল্লেখ করতে চান, আপনার এটিকে অনুলিপি এবং আটকানোর দরকার নেই; আপনি এটির জন্য একটি লিঙ্ক তৈরি করতে পারেন।

  • অন্য যে কোনও পৃষ্ঠাতে একই ইউআরএল লিঙ্ক করতে পারেন।

  • যদি আপনার অনুরূপ পৃষ্ঠাগুলির একটি সংগ্রহ থাকে তবে আপনি একটি সূচক পৃষ্ঠা তৈরি করতে পারেন যা তাদের সকলের লিঙ্কগুলি তালিকাভুক্ত করে, বা আপনার পৃষ্ঠার 1 নীচে একটি "পরবর্তী" লিঙ্ক থাকতে পারে যা আপনাকে পৃষ্ঠা 2 এ নিয়ে যায় এবং এই জাতীয় কিছু। উভয় পদ্ধতির সুবিধা এবং অসুবিধাগুলি তাত্ক্ষণিকভাবে সুস্পষ্ট, বিশেষত যদি আপনি বিবেচনা করেন যে ওয়েবমাস্টারকে বিভিন্ন জায়গায় পৃষ্ঠাগুলি যুক্ত করতে বা মুছে ফেলার জন্য কী করতে হবে।

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


every memory location contains an address- প্রতিটি মেমরি অবস্থানকে হয়েছে একটি ঠিকানা। এটি কোনও পয়েন্টার ভেরিয়েবল ব্যতীত অন্য কোথাও অন্তর্ভুক্ত নেই
রবার্ট হার্ভে

@ রবার্টহরভে প্রতিটি স্মৃতি অবস্থানের (শব্দ, কমপক্ষে) একটি সংখ্যা রয়েছে, যা একটি ঠিকানা হিসাবে তুচ্ছভাবে ব্যাখ্যা করা যেতে পারে ।
মুল বক্তব্যটি

2

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

সি-তে ইউনারি অ্যাম্পারস্যান্ড অপারেটরকে "অ্যাড্রেস-অফ" অপারেটর বলা হয়। সি প্রোগ্রামাররা বলতে দ্বিধা করবেন না যে এক্সপ্রেশনটি &xভেরিয়েবল এক্সের ঠিকানায় মূল্যায়ন করে। অবশ্যই তাদের অর্থ "মেমরিের ঠিকানা যেখানে ভেরিয়েবল এক্সের মান সংরক্ষণ করা হয়" তবে নৈমিত্তিক কথোপকথনে কেউই সেই পেডেন্টিক নন। সিতে "পয়েন্টার" শব্দটি সাধারণত কোনও ভেরিয়েবলের ডেটা টাইপকে বোঝায় যা এর মান হিসাবে একটি মেমরি ঠিকানা রাখে। অথবা সমানভাবে মানের ডেটা টাইপ। তবে কিছু লোক নিজেরাই মান হিসাবে "পয়েন্টার" ব্যবহার করবে।

জাভাতে, অবজেক্ট বা অ্যারে টাইপের সমস্ত ভেরিয়েবল সি পয়েন্টারগুলির মতো অনেক আচরণ করে (পয়েন্টার পাটিগণিত ব্যতীত), তবে জাভা প্রোগ্রামাররা তাদের পয়েন্টার হিসাবে নয়, রেফারেন্স বলে।

সি ++ রেফারেন্স এবং পয়েন্টারগুলিকে বিভিন্ন ধারণা হিসাবে বিবেচনা করে। এগুলি সম্পর্কিত, তবে একেবারে একই জিনিস নয়, সুতরাং সি ++ প্রোগ্রামারদের কথোপকথনে আলাদা করতে হবে। এম্পারস্যান্ডটি কিছু প্রসঙ্গে "অ্যাড্রেস-অফ" এবং অন্যগুলিতে "রেফারেন্স-টু" হিসাবে পড়া হয়।

পয়েন্টার হ'ল একটি ভেরিয়েবল যার মান অন্য ভেরিয়েবলের মেমরি ঠিকানা।

কোনও সি প্রোগ্রামার এটি কীভাবে এটি বর্ণনা করতে পারে, "পয়েন্টার" ব্যবহার করে একই অর্থে "একটি ইনট"। (যেমন হিসাবে, "একটি পয়েন্টার একটি স্মৃতি ঠিকানা ধারণ করে যখন কোনও ইন্টি একটি নির্দিষ্ট পরিসরের মধ্যে একটি পূর্ণসংখ্যা রাখে" ")

পয়েন্টার হ'ল একটি মেমরি অবস্থান যার মান অন্য মেমরির অবস্থানের মেমরি ঠিকানা।

এটি বলার পক্ষে এটি একটি অদ্ভুত উপায়, কারণ এটির জন্য ""

এটি কি নিরাপদে বলা যায় যে একটি পরিবর্তনশীল একটি স্মৃতি অবস্থানের মতো একই জিনিস?

এটি স্পষ্ট করে বলা বাহুল্য যে কোনও মেমরি ঠিকানা হ'ল মেমরির অবস্থান যেখানে কোনও ভেরিয়েবলের মান সংরক্ষণ করা হয়। (মঞ্জুর, সংকলক অপ্টিমাইজেশনের কারণে সমস্ত ভেরিয়েবলগুলি মেমরিতে সংরক্ষণ করা হয় না, তবে যার ঠিকানা সহ নেওয়া হয় &xতার কোনও ভেরিয়েবল হবে))


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

@ ডেডুপ্লিকেটর আমি একজনের জন্য পেডেন্টিক হওয়ার চেষ্টা করছি না।
গাটকিন

সি স্ট্যান্ডার্ডটি এমনকি আনুষ্ঠানিকভাবে ভেরিয়েবলগুলির মধ্যে পৃথক করে যা প্রতিটি "সিকোয়েন্স পয়েন্ট" এ অ্যাবস্ট্রাক্ট মেশিনের পদক্ষেপগুলি কঠোরভাবে অনুসরণ করতে হবে - থ্রেড সুরক্ষা এবং মেমরি-ম্যাপযুক্ত হার্ডওয়্যারে কিছু নিম্ন-স্তরের ক্রিয়াকলাপের জন্য - এবং যারা ডোন না টি, যা কোনও রেজিস্টারে স্থানান্তরিত বা সম্পূর্ণরূপে অপ্টিমাইজ করা মুক্ত।
ডেভিস্লোর

@ ডেভিস্লোর: সি স্ট্যান্ডার্ড এমন জায়গাগুলিতে "অবজেক্ট" শব্দটি ব্যবহার করে যেখানে অন্যান্য ভাষার স্পেসিফিকেশনগুলি "ভেরিয়েবল" ব্যবহার করে, পাশাপাশি অন্যান্য জিনিসগুলিকেও বর্ণনা করতে পারে যা ভেরিয়েবল নয়। কিছু আলোচনার জন্য ভাষা-অজগনীয় শব্দটি "ভেরিয়েবল" ব্যবহার করতে পারে, তবে যে কোনও কারণে স্ট্যান্ডার্ডের কাছে নেস্টেড বরাদ্দ (স্ট্রাক্ট / ইউনিয়ন সদস্য) বা ফলনযুক্ত শিরোনামহীন অবজেক্টের মতো অন্যান্য ধরণের অবজেক্টের সাথে নামযুক্ত ডিসঅজয়েন্ট বরাদ্দ (ভেরিয়েবল) এর মধ্যে পার্থক্য করার কোনও শব্দ নেই whatever পয়েন্টার dereferences দ্বারা। অনানুষ্ঠানিকভাবে, "পরিবর্তনশীল" একটি দুর্দান্ত শব্দ, তবে মানক এটি ব্যবহার করে না।
supercat

@ সুপের্যাট এটি সঠিক নয়। সি 11 স্ট্যান্ডার্ডটি "ভেরিয়েবল" শব্দটি এক শতাধিকবার ব্যবহার করেছে, যার মধ্যে বেশ কয়েকটি ডজন বিশেষ্য, উদাহরণস্বরূপ, "পারমাণবিক ক্রিয়াকলাপের মাধ্যমে এমনকি
চলকটির

1

বিবৃতিটি একটি পয়েন্টারটি একটি পরিবর্তনশীল যার মান হ'ল অন্য ভেরিয়েবলের মেমরি ঠিকানাটি বড় আকারের হয় ified তবে কোনও পাঠক যখন বুঝতে পারবেন যে ঠিক কীভাবে মেমরির অবস্থান হয় এবং এটি কীভাবে একটি ভেরিয়েবলের থেকে পৃথক হয়, তারা ইতিমধ্যে বুঝতে পারে যে পয়েন্টারটি ঠিক কী এবং তাই এই ভুল বর্ণনার উপর নির্ভর করার দরকার নেই।

বিবৃতিটি একটি পয়েন্টার একটি মেমরি অবস্থান যার মান অন্য মেমরির অবস্থানের মেমরি ঠিকানাটি ভুল। কোনও পয়েন্টারের মান কোনও মেমরির স্থানে সংরক্ষণ করার প্রয়োজন হয় না এবং এটি বিতর্কযোগ্য যদি "মেমোরি" এর সংজ্ঞাযুক্ত সংজ্ঞা অনুসারে কোনও পয়েন্টারকে কোনও মেমরি অবস্থানের দিকে নির্দেশ করতে হয়।

একটি ভেরিয়েবল এবং একটি মেমরি অবস্থানের মধ্যে পার্থক্য কী

মেমরি অবস্থান হ'ল একাধিক সম্ভাব্য স্থান যেখানে ডেটা সংরক্ষণ করা যায়। সেই ডেটাটি একটি ভেরিয়েবল বা ভেরিয়েবলের অংশ হতে পারে। ভেরিয়েবলগুলি ডেটা লেবেল করার একটি উপায়।


0

এই উত্তরটি সি এবং সি ++ তে ফোকাস করে; এটি যথাযথ বলে মনে হচ্ছে যেহেতু আপনার প্রশ্নটি পয়েন্টারগুলির সাথে সম্পর্কিত যা অন্য ভাষার চেয়ে সি / সি ++ এর আরও বেশি অবিচ্ছেদ্য অঙ্গ। এই পোস্টটির বেশিরভাগই বিস্তৃত রান সময় (প্যাসকেল বা অ্যাডা, তবে জাভা বা সি # এর মতো নয়) ব্যতীত বেশিরভাগ সংকলিত ভাষায় প্রয়োগ হবে।

ইতিমধ্যে প্রদত্ত ভাল উত্তরগুলি জোর দেয় যে একটি ভেরিয়েবল একটি শারীরিক স্মৃতির চেয়ে আরও বিমূর্ত স্তরে ভাষা গঠন। আমি জোর দিয়ে বলতে চাই যদিও এই বিমূর্তির একটি নির্দিষ্ট যুক্তি এবং সিস্টেম রয়েছে:

বিমূর্ততা মূলত একটি আক্ষরিক ঠিকানার পরিবর্তে একটি নাম ব্যবহার করে।

নীতি ধারণাটি একটি ভেরিয়েবল একটি টাইপযুক্ত বস্তুর জন্য নামযুক্ত হ্যান্ডেল; সি / সি ++ এর অবজেক্টগুলি সাধারণত স্মৃতিতে থাকে। ভাষাগুলি টাইপ রূপান্তরগুলির জন্য আজীবন পরিচালনা এবং ডেটা মার্শালিং সম্পর্কিত কিছু চমত্কার যুক্ত করে। ভেরিয়েবলের ধারণাটি শারীরিক ঠিকানার চেয়ে আরও বিমূর্ত হয় কারণ আমরা আসলে ঠিকানাগুলির সংখ্যাসম্য বা স্মৃতিতে ফাংশনের সঠিক অবস্থানের বিষয়ে চিন্তা করি না। আমরা কেবল তাদের নাম দিয়ে থাকি এবং পরে তাদের নাম দিয়ে সম্বোধন করি এবং সংকলক, লিঙ্কার এবং রানটাইম সিস্টেম কৌতুকপূর্ণ বিশদ যত্ন নেবে।

এবং ভেবে দেখবেন না যে সি / সি ++ হ'ল মেমরি অজোনস্টিক: সর্বোপরি, সর্বজনীনভাবে প্রয়োগযোগ্য অ্যাড্রেস অপারেটর রয়েছে। হ্যাঁ, সত্য, আপনি রেজিস্টার স্টোরেজ ক্লাসে সি ভেরিয়েবলের ঠিকানা নিতে পারবেন না; তবে আপনি কখন শেষ ব্যবহার করেছেন? এটি সাধারণ ধারণার একটি বিশেষ ব্যতিক্রম, যুক্তিটির পাইকারি বরখাস্ত নয়। এর বিপরীতে সাধারণ নিয়মটি হ'ল, কোনও ভেরিয়েবলের ঠিকানা নেওয়া আসলে কম্পাইলারকে সত্যই স্মৃতিতে একটি বস্তু তৈরি করতে বাধ্য করে, যদিও তা অন্যথায় না করে (যেমন ধ্রুবক সহ)। "নামী হ্যান্ডেল" ধারণাটিও সি ++ রেফারেন্সের জন্য একটি ভাল দৃষ্টান্ত: একটি রেফারেন্স একই অবজেক্টের অন্য একটি নাম

আমি যখন 68k এর জন্য ইনলাইন এসেম্বলার লিখলাম তখন দেখতে পেলাম কীভাবে আপনি রেজিস্টারগুলিকে সম্বোধন করতে অফসেট হিসাবে পরিবর্তনশীল নামগুলি ব্যবহার করতে পারেন (এবং আপনি registerখালি ধাতব রেজিস্টার নামের পরিবর্তে ঘোষিত ভেরিয়েবলের নামগুলি ব্যবহার করতে পারেন !)। সংকলকটির কাছে, একটি চলক হ'ল একটি ধ্রুব ঠিকানা অফসেট। পুনরাবৃত্তি করতে: ভেরিয়েবলগুলির নাম হ্যান্ডলগুলি দেওয়া হয়, সাধারণত মেমরির বস্তুগুলির জন্য।


পয়েন্টারগুলি সি #, জাভা, জেএস এবং অন্যান্য ভাষার খুব মৌলিক অংশ। তাদের আলাদাভাবে কল করা এটি পরিবর্তন করে না, যদিও এটি ভাল জনসংযোগ।
Deduplicator

@ প্রতিলিপি :-) ভাল ওল 'টনি ...
পিটার - মনিকা

0

এটি শোনার মতো মনে হচ্ছে যে অতিরিক্ত গ্যারান্টির সাথে সি স্ট্যান্ডার্ডকে বাড়িয়ে প্রশ্নটির লক্ষ্য একটি জনপ্রিয় ভাষা তৈরি করা হয়েছে "স্ট্যান্ডার্ডের কিছু অংশ বা কোনও প্রয়োগের নথিপত্র কিছু ক্রিয়াকলাপের আচরণ বর্ণনা করে এবং অন্য কিছু অংশ এটিকে সংজ্ঞায়িত হিসাবে শ্রেণিবদ্ধ করে তোলে , পূর্ববর্তী অংশটি প্রাধান্য পেয়েছে,

সেই ভাষায় প্রতিটি মেমোরি অবস্থানটি এমন একটি মেলবাক্স হিসাবে দেখা যায় যা সর্বদা কিছু সংখ্যক (সাধারণত আটটি) বিট ধারণ করে, যার প্রতিটি স্বতন্ত্রভাবে শূন্য বা এক হতে পারে। মেমোরি অবস্থানগুলি সাধারণত দুটি, চার বা আটটি সারিতে সজ্জিত হয়। এবং কিছু ক্রিয়াকলাপ এক সাথে একাধিক পরপর মেমরি অবস্থানগুলিতে প্রক্রিয়া করে। মেশিনের উপর নির্ভর করে কিছু অপারেশন যা দুটি, চার, বা আটটি মেমরি অবস্থানের গ্রুপে কাজ করে তা একক সারির মধ্যে অবস্থানগুলিতে অপারেটিংয়ের মধ্যে সীমাবদ্ধ হতে পারে। তদুপরি, কিছু মেশিনে ধারাবাহিক সংখ্যাযুক্ত মেলবক্সগুলির একক কক্ষ থাকতে পারে, অন্যদের নম্বরের মেলবক্সগুলির একাধিক বিভাজন গ্রুপ থাকতে পারে।

একটি পরিবর্তনশীল এটির সাথে একত্রে যুক্ত কিছু মেমরি অবস্থান এবং সেই ধরণের মেমরির অবস্থানগুলি ব্যাখ্যা করা উচিত এমন একটি প্রকার সনাক্ত করে। একটি ভেরিয়েবল পড়ার ফলে এর সাথে সম্পর্কিত স্টোরেজ অবস্থানগুলির মধ্যে বিটগুলি ভেরিয়েবলের ধরণের উপযুক্ত উপায়ে ব্যাখ্যা করা হবে এবং ভেরিয়েবলটি লেখার সাথে সম্পর্কিত বিটগুলি তার প্রকার এবং মানের সাথে উপযুক্তভাবে সেট করা যায়।

একটি ঠিকানা একটি মেলবক্স শনাক্ত করতে প্রয়োজনীয় যা তথ্য প্রয়োজন তা encapsulates। এটি একটি সাধারণ নম্বর হিসাবে বা গ্রুপ ডিজাইনার হিসাবে কোনও গ্রুপের মধ্যে একটি মেইলবক্সের সংখ্যার পাশাপাশি সংরক্ষণ করা যেতে পারে।

কোনও চলকটিতে &অপারেটর প্রয়োগ করে এমন একটি পয়েন্টার পাওয়া যাবে যা ঠিকানাটি টাইপ করে এবং এটি টাইপ করে। পয়েন্টারে অ্যানারি *বা []অপারেটর প্রয়োগ করার ফলে এনক্যাপসুলেটেড ঠিকানায় শুরু হওয়া মেলবক্সগুলির বিটগুলি ব্যাখ্যা করা বা এনক্যাপসুলেটেড টাইপের উপযুক্ত উপায়ে সেট করতে পারে।


দেখে মনে হচ্ছে আপনি প্রশ্নটিকে ওভারটিক করছেন।
রবার্ট হার্ভে

0

আমি এই পার্টিতে দেরি করে আসছি তবে আমি আমার 2 সেন্ট ভিতরে রেখে প্রতিরোধ করতে পারি না।

এই সময়ে, এই স্মৃতি অবস্থানগুলিতে সঞ্চিত মানগুলির মধ্যে পার্থক্য কী?

সময় ঘ

এখানে চিত্র বর্ণনা লিখুন

সময় 2

এখানে চিত্র বর্ণনা লিখুন

সঠিক উত্তর: কিছুই না। এগুলি সমস্ত অর্থের অর্থ তাদের অর্থের বিভিন্ন ব্যাখ্যা সহ উপস্থাপিত হচ্ছে।

আমি কীভাবে জানি? কারণ আমিই এটিকে তৈরি করেছি। আপনি এখনও সত্যিই এটি জানেন না।

আপনি এমন কোনও কিছুতে দৌড়াচ্ছেন যা আমি ব্যান্ড সমস্যার আউট বলি । এই মানগুলির অর্থ কীভাবে সঠিকভাবে ব্যাখ্যা করবেন তা এখানে সংরক্ষণ করা হয়নি। সেই জ্ঞানটি অন্য কোথাও সঞ্চিত রয়েছে। তবুও আপনি যখন এই মানগুলিকে কাগজে উপস্থাপন করেন আপনি সেই ব্যাখ্যায় রেখেছিলেন। তার মানে আপনি এমন তথ্য যুক্ত করেছেন যা এই মেমরির অবস্থানগুলিতে কেবল অস্তিত্বহীন।

উদাহরণস্বরূপ, এখানকার মানগুলি অভিন্ন, তবে আপনি কেবল এটিই জানেন যে আপনি যখন সঠিকভাবে ঠিক হন তবে আপনি যখন ASCII / UTF-8 অক্ষর এনকোডিং অনুমান করি তখনই আমি কীভাবে প্রথমটি পেয়েছি, EBCDIC না বলে । এবং আপনাকে এটিও ধরে নিতে হবে যে দ্বিতীয়টি হ'ল মেমোরি অবস্থানগুলিতে সঞ্চিত সংখ্যাগত মানগুলির হেক্সাডেসিমাল এক্সপ্রেশন, যা সমস্ত "0x" দিয়ে শুরু হওয়া স্ট্রিংয়ের রেফারেন্সের পরিবর্তে অন্য ঠিকানাগুলিতে পয়েন্টার হতে পারে। : P: P

এই মেমরির অবস্থানগুলিতে সঞ্চিত কিছুই আপনাকে এই অনুমানগুলি সঠিক বলে দেয় না tells তথ্য সংরক্ষণ করা যেতে পারে। তবে এটি অন্য কোথাও সংরক্ষণ করা হবে।

এটি উপস্থাপনা সমস্যা । প্রথমে কীভাবে এটি উপস্থাপন করবেন সে বিষয়ে একমত না হয়ে আপনি কোনও সংখ্যা প্রকাশ করতে পারবেন না। আপনি অনুমান, কনভেনশন এবং প্রসঙ্গের উপর ঝুঁকতে পারেন তবে আপনি যদি গভীরভাবে এগুলি স্ক্র্যাচ করেন, যখন উপস্থাপনাটি স্পষ্টভাবে সংজ্ঞায়িত করা হয় না, তবে কেবলমাত্র সঠিক উত্তরটি হ'ল "পর্যাপ্ত তথ্য নয়"।


একই স্মৃতি একই সময়ে বিভিন্ন ধ্রুবক জিনিসের জন্য ব্যবহার করা হলে এটি আরও মজাদার।
Deduplicator

পছন্দ করুন এটি আমাকে সর্বদা সি ++ এর পুনরায় ব্যাখ্যা কাস্ট সম্পর্কে ভাবতে বাধ্য করে । একই বিট অন্যরকম ভাবে দেখা গেছে।
candied_orange

@ উত্সাহক বা, এটি ভাবতে আসুন, সি
candied_orange
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.