ঠিক একটি ইন্টারপ্রেট কি?


171

ইন্টেলিজেন্স ব্যবহার করে এবং অন্য ব্যক্তির কোড দেখার মাধ্যমে, আমি এই ধরণেরটি দেখতে পেয়েছি IntPtr; প্রতিবার এটি ব্যবহার করার প্রয়োজন হয়েছে আমি কাজ করতে বেশিরভাগ ফাংশন সহজভাবে রেখেছি nullবা IntPtr.Zeroখুঁজে পেয়েছি। এটি ঠিক কী এবং কখন / কেন ব্যবহৃত হয়?

উত্তর:


158

এটি একটি "দেশীয় (প্ল্যাটফর্ম-নির্দিষ্ট) আকারের পূর্ণসংখ্যা"। এটি অভ্যন্তরীণভাবে উপস্থাপিত হয় void*তবে এটি পূর্ণসংখ্যা হিসাবে প্রকাশিত হয়। আপনি যখনই কোনও পরিচালনা না করা পয়েন্টার সঞ্চয় করতে চান এবং unsafeকোড ব্যবহার করতে চান না তখন আপনি এটি ব্যবহার করতে পারেন । IntPtr.Zeroকার্যকরভাবে NULL(একটি নাল পয়েন্টার)।


53
পয়েন্টার এমন একটি জিনিস যা স্মৃতিতে একটি ঠিকানাকে নির্দেশ করে। পরিচালিত ভাষাগুলিতে আপনার রেফারেন্স রয়েছে (অ্যাড্রেসটি চারপাশে চলতে পারে) যখন পরিচালনা না করা ভাষাগুলিতে আপনার পয়েন্টার রয়েছে (ঠিকানাটি স্থির করা হয়েছে)
কলিন ম্যাকে

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

5
এই মন্তব্যটির জন্য +1 @ 280Z28, এটি আমার দেখা পয়েন্টারের সর্বাধিক সংক্ষিপ্ত ব্যাখ্যা।
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

9
এটিকে ইন্টিপিটিআর বলা হয়, কারণ এটি পরিচালনা না করা নেটিভ কোড, সি / সি ++ থেকে ব্যবহার করতে আপনাকে অ্যানালগিক টাইপ ব্যবহার করতে হবে: intptr_t। সি # এর ইন্টিপিটিআর মানচিত্রগুলি সি / সি ++ এর ইন্টিপ্রেট_টাকে ঠিক করে। এবং এটি সম্ভবত intptr_t হিসাবে প্রয়োগ করা হয়েছে। সি / সি ++ এ, ইন্টিপ্রেট_ টাইপটি শূন্য * প্রকারের মতো একই আকারের গ্যারান্টিযুক্ত।
Петров

2
@ ট্র্যাপ "একটি প্ল্যাটফর্ম-নির্দিষ্ট ধরণের যা পয়েন্টার বা একটি হ্যান্ডেল উপস্থাপন করতে ব্যবহৃত হয়।" কোনও "প্ল্যাটফর্ম-নির্দিষ্ট পূর্ণসংখ্যার" নয়, "পয়েন্টার বা হ্যান্ডেল উপস্থাপনের জন্য প্ল্যাটফর্ম-নির্দিষ্ট উপায়"। IntPtrনিখুঁত ধারণা তৈরি করে, কারণ এটি একটি পূর্ণসংখ্যার (যেমনটি গাণিতিক পূর্ণসংখ্যা হিসাবে) এবং একটি পয়েন্টার (পয়েন্টার হিসাবে)। Intঅংশ সামান্য int- এ টাইপ কি আছে - এটা একটা ধারণা, না একটি নির্দিষ্ট ধরনের আছে। যদিও ন্যায়সঙ্গত হতে পারে, তবে সিএলআই-র স্পষ্টতই এটি সম্পর্কে যা বলা হয় তা হ'ল এটি আসলে একটি "পূর্ণসংখ্যার, স্থানীয় আকার"। ওহ ভাল :)
লুয়ান

69

নেটিভ বা অনিরাপদ কোড হিসাবে ব্যবহৃত মেমরি ঠিকানা সংরক্ষণের জন্য এটি যথেষ্ট পরিমাণের একটি মান ধরণের, তবে নিরাপদ পরিচালিত কোডে মেমরির ঠিকানা হিসাবে সরাসরি ব্যবহারযোগ্য নয়।

আপনি IntPtr.Size32-বিট বা 64-বিট প্রক্রিয়াতে চলেছেন কিনা তা অনুসন্ধান করতে আপনি যথাযথভাবে 4 বা 8 বাইট হিসাবে ব্যবহার করতে পারেন ।


16
প্রক্রিয়াটির জন্য ঠিকানা জায়গার আকার সনাক্তকরণ সম্পর্কে ভাল পয়েন্ট।
নলডোরিন

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

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

@ ড্যানিয়েলআরওয়িকার ওয়েল, এটি কোনও বর্তমান। নেট প্রয়োগের ক্ষেত্রে সমস্যা নয়, যতদূর আমি সচেতন। তবে, (historicalতিহাসিক) সমস্যাটি মাত্র আকারের নয় - বিভিন্ন পয়েন্টারগুলি সম্পূর্ণ বেমানান হতে পারে। আজকের কাছাকাছি থাকা একটি উদাহরণে, পিএইই native৪-বিট ঠিকানা ব্যবহার করবে যদিও "নেটিভ পয়েন্টারের আকার" এখনও 32-বিট ছিল। এটি পুরোপুরি আর্গুমেন্টে ফিরে যায় "" 32-বিট সিস্টেম "এর অর্থ আসলে কী?" আমাদের কাছে এখন 256-বিট এবং 512-বিট সংখ্যাসূচক নিবন্ধ রয়েছে, তবে এখনও এটি 64-বিট বলে। আপনি আপনার 64৪-বিট "পয়েন্টার" দিয়ে প্রকৃত শারীরিক মেমরির 64-বিটগুলিকে সম্বোধন করতে পারবেন না যদিও । এটি একটি জগাখিচুড়ি.
লুয়ান

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

48

এখানে একটি উদাহরণ:

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

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


7
সুতরাং IntPtr সরল আপনাকে পরিচালিত কোডটিতে একটি পরিচালনা না করা পয়েন্টার (যেমন আপনার ক্যামেরা ড্রাইভারের মতো ব্যবহার করা) ব্যবহার করতে দেয়?
কলম রজার্স

5
হ্যাঁ. ঠিক এই ক্ষেত্রে, সম্ভবত ক্যামেরা ড্রাইভার হুডের নীচে নিয়ন্ত্রণহীন চালকদের ব্যবহার করে, তবে কেবলমাত্র পরিচালিত-বিশ্বে সঠিকভাবে পরিচালনা করতে এটি ইন্টারপ্রেটারটি সরবরাহ করে যা আমাকে নিরাপদে ডেটা নিয়ে কাজ করতে দেয়।
বুফার্জ

3
তাহলে কেন এটি আপনাকে কেবল একটি স্ট্রিম (বাইট অ্যারে) ফিরিয়ে দেবে না? কেন এটি অনিরাপদ বা মানটি ফেরত দিতে অক্ষম?
মাফিন ম্যান

35

একটি সরাসরি ব্যাখ্যা

একটি IntPtr একটি পূর্ণসংখ্যা যা পয়েন্টার হিসাবে একই আকার

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

IntPtr এর আকার প্ল্যাটফর্ম-নির্দিষ্ট, তবে এই বিশদটি খুব কমই বিবেচনা করা দরকার, যেহেতু সিস্টেম স্বয়ংক্রিয়ভাবে সঠিক আকারটি ব্যবহার করবে।

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

একটি বিকল্প দৃষ্টিকোণ

একটি IntPtrদুটি সীমাবদ্ধতা সহ একটি পয়েন্টার:

  1. এটি সরাসরি উপস্থাপন করা যায় না
  2. এটি যে ধরণের ডেটা নির্দেশ করে তা এটি জানেন না।

অন্য কথায়, একটি IntPtrঠিক একটি এর মতোvoid* - তবে অতিরিক্ত বৈশিষ্ট্য সহ এটি মৌলিক পয়েন্টার গাণিতিকের জন্য ব্যবহার করা যেতে পারে (তবে হওয়া উচিত নয়)।

কোনওটিকে অবলম্বন করার জন্য IntPtr, আপনি এটিকে সত্য পয়েন্টারটিতে কাস্ট করতে পারেন (একটি অপারেশন যা কেবল "অনিরাপদ" প্রসঙ্গে প্রদর্শিত হতে পারে) বা আপনি এটি InteropServices.Marshalক্লাসের সরবরাহকৃত সহায়তার মতো রুটিনে পাস করতে পারেন । Marshalক্লাসটি ব্যবহার করা সুরক্ষার মায়া দেয় কারণ এটি আপনাকে সুস্পষ্ট "অনিরাপদ" প্রসঙ্গে থাকতে হবে না। তবে এটি পয়েন্টার ব্যবহারের সহজাত যা ক্রাশ হওয়ার ঝুঁকি সরিয়ে দেয় না remove


2
"সি" প্রোগ্রামিং ভাষার সি 99 স্ট্যান্ডার্ড থেকে "ইন্টারপ্টর" নামটির কিছু নজির রয়েছে। linux.die.net/man/3/intptr_t
ব্রেন্ট ব্র্যাডবার্ন

17

পয়েন্টার কী?

সমস্ত ভাষায়, পয়েন্টার হ'ল এক ধরণের ভেরিয়েবল যা মেমোরি ঠিকানা সঞ্চয় করে এবং আপনি তাদেরকে যে ঠিকানাটি দেখিয়ে দিচ্ছেন বা যে ঠিকানাটিতে তারা নির্দেশ করছেন সেটির মান বলতে আপনাকে জিজ্ঞাসা করতে পারেন ।

একটি পয়েন্টারটিকে বইয়ের চিহ্ন হিসাবে বাছাই করা যায়। বইয়ের কোনও পৃষ্ঠায় দ্রুত ঝাঁপিয়ে পড়ার পরিবর্তে, পয়েন্টারটি মেমরির ব্লকগুলি বা মানচিত্রের জন্য ব্যবহার করতে ব্যবহৃত হয়।

আপনার প্রোগ্রামটির মেমরিটি অবিকল 65535 বাইটের একটি বড় অ্যারের মতো কল্পনা করুন।

পয়েন্টারগুলি আনুগত্যের সাথে নির্দেশ করে

পয়েন্টারগুলি প্রতিটি একটি মেমরি ঠিকানা মনে রাখে এবং সেজন্য তারা প্রত্যেকে মেমরিতে একক ঠিকানার দিকে নির্দেশ করে।

একটি গোষ্ঠী হিসাবে, পয়েন্টারগুলি আপনার প্রতিটি কমান্ড বিজ্ঞাপনের nauseum মান্য করে মেমরি ঠিকানাগুলি স্মরণ করে এবং পুনরায় স্মরণ করে।

আপনি তাদের রাজা।

সি # তে পয়েন্টার

বিশেষত সি # তে, একটি পয়েন্টার হল একটি পূর্ণসংখ্যার পরিবর্তনশীল যা 0 এবং 65534 এর মধ্যে একটি মেমরি ঠিকানা সঞ্চয় করে।

সি # তেও নির্দিষ্ট, পয়েন্টারগুলি টাইপ ইনট এবং তাই স্বাক্ষরিত।

আপনি যদিও নেতিবাচক নম্বরযুক্ত ঠিকানা ব্যবহার করতে পারবেন না, আপনি 65534 এর উপরে কোনও ঠিকানাও অ্যাক্সেস করতে পারবেন না so

মাইপয়েন্টার নামক একটি পয়েন্টারটি এভাবে ঘোষণা করা হয়:

int * মাইপয়েন্টার;

সি # তে একটি পয়েন্টার একটি অন্তর্নিহিত, তবে সি # তে মেমরি ঠিকানাগুলি 0 থেকে শুরু হয় এবং 65534 পর্যন্ত প্রসারিত হয়।

মূল বিষয়গুলি অতিরিক্ত বিশেষ যত্ন সহ পরিচালনা করা উচিত

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

পয়েন্টার প্রোগ্রামারকে কোনও সিস্টেমের শক্ত নিয়ন্ত্রণ দেয়। সুতরাং করা ভুলগুলি আরও গুরুতর পরিণতি হতে পারে।

পয়েন্টারগুলি ব্যবহার করতে, আপনার প্রোগ্রামের বৈশিষ্ট্যগুলিতে অনিরাপদ কোডটি সক্ষম করতে হবে এবং পয়েন্টারগুলি অনিরাপদ হিসাবে চিহ্নিত পদ্ধতিতে বা ব্লকগুলিতে একচেটিয়াভাবে ব্যবহার করতে হবে।

অনিরাপদ ব্লকের উদাহরণ

unsafe
{
    // Place code carefully and responsibly here.

}

পয়েন্টার কীভাবে ব্যবহার করবেন

যখন ভেরিয়েবল বা অবজেক্টগুলি ঘোষিত বা তাত্ক্ষণিকভাবে প্রকাশ করা হয় তখন এগুলি মেমরিতে সংরক্ষণ করা হয়।

  • * প্রতীক উপসর্গটি ব্যবহার করে একটি পয়েন্টার ঘোষণা করুন।

int *MyPointer;

  • কোনও ভেরিয়েবলের ঠিকানা পেতে, আপনি & প্রতীক উপসর্গটি ব্যবহার করুন।

MyPointer = &MyVariable;

একবার কোনও পয়েন্টারের কাছে ঠিকানা নির্ধারিত হয়ে গেলে, নিম্নলিখিতটি প্রয়োগ হয়:

  • * প্রিফিক্স ব্যতীত মেমরির ঠিকানাটি উল্লেখ করার জন্য কোনও int হিসাবে নির্দেশ করা হচ্ছে।

MyPointer = &MyVariable; // Set MyPointer to point at MyVariable

  • * প্রিফিক্স সহ মেমরি ঠিকানার দিকে সঞ্চিত মানটি নির্দেশ করা হচ্ছে।

"MyPointer is pointing at " + *MyPointer;

যেহেতু পয়েন্টারটি একটি ভেরিয়েবল যা একটি মেমরি ঠিকানা রাখে, তাই এই মেমরি ঠিকানাটি একটি পয়েন্টার ভেরিয়েবলে সংরক্ষণ করা যায়।

পয়েন্টারগুলির উদাহরণটি সতর্কতার সাথে এবং দায়িত্বের সাথে ব্যবহার করা হচ্ছে

    public unsafe void PointerTest()
    {
        int x = 100; // Create a variable named x

        int *MyPointer = &x; // Store the address of variable named x into the pointer named MyPointer

        textBox1.Text = ((int)MyPointer).ToString(); // Displays the memory address stored in pointer named MyPointer

        textBox2.Text = (*MyPointer).ToString(); // Displays the value of the variable named x via the pointer named MyPointer.

    }

লক্ষ্য করুন যে পয়েন্টারের ধরণটি একটি অন্তর্নিহিত। এটি কারণ সি # মেমরি ঠিকানাগুলিকে পূর্ণসংখ্যার সংখ্যা (ইন্ট) হিসাবে ব্যাখ্যা করে।

এটি ইউন্টের পরিবর্তে কেন?

কোনও ভাল কারণ নেই।

পয়েন্টার কেন ব্যবহার করবেন?

পয়েন্টারগুলি অনেক মজাদার। কম্পিউটারের প্রচুর পরিমাণ মেমোরি দ্বারা নিয়ন্ত্রিত হওয়ার সাথে সাথে পয়েন্টারগুলি তাদের প্রোগ্রামের মেমরির আরও নিয়ন্ত্রণের সাথে একটি প্রোগ্রামারকে শক্তিশালী করে।

স্মৃতি পর্যবেক্ষণ।

মেমরির ব্লকগুলি পড়তে পয়েন্টারগুলি ব্যবহার করুন এবং সময়ের সাথে মানগুলি কীভাবে পরিবর্তিত হচ্ছে তা নিরীক্ষণ করুন।

এই মানগুলি দায়িত্বপূর্ণভাবে পরিবর্তন করুন এবং আপনার পরিবর্তনগুলি আপনার কম্পিউটারে কীভাবে প্রভাবিত করে তা ট্র্যাক করে রাখুন।


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

1
আমি এটিকে ভোট দিয়েছি কারণ এটি পয়েন্টারগুলি ব্যাখ্যা করে একটি দুর্দান্ত নিবন্ধ। আপনি বর্ণিত চশমাগুলির কয়েকটি রেফারেন্স দেখতে চাই (উপরে মন্তব্য হিসাবে)। যাহোক; এই প্রশ্নের প্রশ্নের সাথে কোনও সম্পর্ক নেই। প্রশ্ন ছিল System.IntPtr। আমি উত্তরটিতে আপডেটটি দেখতে চাই System.IntPtrএবং সি # এর অনিরাপদ পয়েন্টারগুলির সাথে কী কী এটি এবং কীভাবে দয়া করে তা ব্যাখ্যা করে দেখতে চাই please
মাইকেল পকেট দ্বিতীয়

7

এমএসডিএন আমাদের বলে:

IntPtr প্রকারটি একটি পূর্ণসংখ্যা হিসাবে ডিজাইন করা হয়েছে যার আকার প্ল্যাটফর্ম-নির্দিষ্ট। এটি হ'ল, এই ধরণের উদাহরণটি 32-বিট হার্ডওয়্যার এবং অপারেটিং সিস্টেমগুলিতে 32-বিট, এবং 64-বিট হার্ডওয়্যার এবং অপারেটিং সিস্টেমগুলিতে 64৪-বিট হবে।

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

হ্যান্ডলগুলি ধরে রাখতে ইন্টারপ্রেট অবজেক্টসও ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, ফাইলের হ্যান্ডলগুলি ধরে রাখতে সিস্টেম.আইও.ফাইস্ট্রিম ক্লাসে ইন্টিপিটিআর উদাহরণগুলি ব্যাপকভাবে ব্যবহৃত হয়।

ইন্টিপিটিআর টাইপটি সিএলএস-সম্মতিযুক্ত, যখন ইউআইএনটিপিআরটি টাইপ হয় না। প্রচলিত ভাষা রানটাইমে কেবলমাত্র ইন্টারপ্রেটার টাইপ ব্যবহৃত হয়। ইউআইএনটিপিটিআর টাইপটি বেশিরভাগ ইন্টারপ্রেটার টাইপের সাথে আর্কিটেকচারাল প্রতিসাম্য বজায় রাখতে সরবরাহ করা হয়।

http://msdn.microsoft.com/en-us/library/system.intptr(VS.71).aspx


5

ওয়েল এটি এমএসডিএন পৃষ্ঠা যা নিয়ে কাজ করে IntPtr

প্রথম লাইনে লেখা আছে:

একটি প্ল্যাটফর্ম-নির্দিষ্ট প্রকার যা কোনও পয়েন্টার বা হ্যান্ডেলের প্রতিনিধিত্ব করতে ব্যবহৃত হয়।

পৃষ্ঠাটি কোনও পয়েন্টার বা হ্যান্ডেলটি কী তা বর্ণনা করে:

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

হ্যান্ডলগুলি ধরে রাখতে ইন্টারপ্রেট অবজেক্টস ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, ফাইলের হ্যান্ডলগুলি ধরে রাখতে সিস্টেম.আইও.ফাইস্ট্রিম ক্লাসে ইন্টিপিটিআর উদাহরণগুলি ব্যাপকভাবে ব্যবহৃত হয়।

একটি পয়েন্টার হ'ল মেমরির একটি ক্ষেত্র যা আপনার আগ্রহী কিছু ডেটা ধারণ করে to

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


2

একটি IntPtrএকটি মান ধরণের যা প্রাথমিকভাবে মেমরি ঠিকানা বা হ্যান্ডলগুলি ধরে রাখতে ব্যবহৃত হয়। একটি পয়েন্টার একটি মেমরি ঠিকানা। একটি পয়েন্টার টাইপ করা যেতে পারে (যেমন int*) বা টাইপযুক্ত (যেমন void*)। একটি উইন্ডোজ হ্যান্ডেল এমন একটি মান যা সাধারণত মেমরি ঠিকানার চেয়ে একই আকার (বা ছোট) হয় এবং একটি সিস্টেম উত্সকে উপস্থাপন করে (ফাইল বা উইন্ডোর মতো)।

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