পয়েন্টার ঘোষণার জন্য আপনার প্রিয় পদ্ধতিটি কী?
int* i;
অথবা
int *i;
অথবা
int * i;
অথবা
int*i;
কেন দয়া করে ব্যাখ্যা করুন।
int*i;
- গাছে সাদা জায়গা বৃদ্ধি পায় না, আপনি জানেন ...
পয়েন্টার ঘোষণার জন্য আপনার প্রিয় পদ্ধতিটি কী?
int* i;
অথবা
int *i;
অথবা
int * i;
অথবা
int*i;
কেন দয়া করে ব্যাখ্যা করুন।
int*i;
- গাছে সাদা জায়গা বৃদ্ধি পায় না, আপনি জানেন ...
উত্তর:
আপনি যদি লিখেন:
int* i, j, k;
আপনি বিভ্রান্তিকরভাবে পরামর্শ দিচ্ছেন যে i, j এবং k এর সমস্তগুলিই নির্দেশক int
।
সুতরাং আমি দাবি করছি যে এটি * পরিবর্তনশীল নামের সাথে সংযুক্তি করা থেকে শ্রেষ্ঠ।
int * i;
এটি কোনও প্রতিযোগী নয়, কারণ এটি দ্রুত নজরে গুণনের মতো।
int*
প্রকার হিসাবে দেখা হয় এবং int* i, j
দুটি পয়েন্টার ঘোষণা করে না। প্রশ্নটি অসম্পূর্ণ হিসাবে বিবেচিত হতে পারে - এটি আপনি যে ভাষাটি ব্যবহার করছেন তার উপর নির্ভর করে কোন স্টাইল যুক্তিসঙ্গত। সিআই অনুসরণ করে int *x
, সি # এ আমি অন্যথায় করি।
আমি পছন্দ করি int* i
কারণ i
"ইনট্রে পয়েন্টার ইন ইন" টাইপ রয়েছে এবং আমি অনুভব করি এটি টাইপ সিস্টেমের সাথে একরকম করে তোলে। অবশ্যই, সুপরিচিত আচরণটি আসে যখন এক লাইনে একাধিক পয়েন্টার সংজ্ঞায়িত করার চেষ্টা করা হয় (যথা, পয়েন্টার ঘোষণার জন্য প্রতিটি ভেরিয়েবলের আগে নক্ষত্রটি স্থাপন করা প্রয়োজন), তবে আমি কেবল পয়েন্টারগুলিকে এভাবে ঘোষণা করি না। এছাড়াও, আমি মনে করি এটি সি-স্টাইলের ভাষাগুলিতে একটি গুরুতর ত্রুটি।
*i
একটি ধরণের আছে int
।
সি এর জন্য, যেখানে আমাদের ধরণের উপর দৃ strong় মনোনিবেশ নেই, আমি পছন্দ করি:
int *i;
কারণ এটিতে একটি জোর রয়েছে int
, পয়েন্টারটি নয়। কি int
? *i
অন্তর্নিহিত হয়।
int i = 5
মান থাকে i
, আপনি নামটি ব্যবহার করেন i
। অনুরূপভাবে, যদি আপনার কাছে থাকে int *i; *i = 5
তবে মানটি পেতে, আপনি ব্যবহার করুন *i
।
আমি int* i
বছরের পর বছর ধরে পছন্দ করেছি । তবে এর জন্য একটি শক্ত যুক্তি রয়েছে int *i
কারণ পূর্ববর্তী শৈলীটি ব্যবহার করার সময়, আপনাকে এখনও একাধিক ঘোষণার নিয়মটি মনে রাখতে হবে:
int* a, *b; // not int* a, b;
কারণ আপনাকে অবশ্যই এই নিয়মটি মনে রাখতে হবে, আপনি কোনও সহজভাবে লাভ করতে পারেন না — তবে আমি এটি আরও জটিল বলব না। আপনি এই নিয়মটি মনে রেখেছেন বলে এক লাইনে একাধিক ঘোষণাকে এড়িয়ে যাওয়া another দুটি শৈলীর মধ্যে পার্থক্যটি মোট oot
আমি যেমন এটি ব্যবহার করি তেমনি, সি ঘোষণাপত্র সিনট্যাক্সটি এটির মতো অন্য কাজ করে বলে ভান করতে কিছুটা নির্বোধ বোধ করে, বিন্যাসটি সিন্ট্যাকটিকভাবে আবদ্ধ না হয়ে পরিবর্তে টাইপের পাশে স্থাপন করে।
আমি কিনতে না মধ্যে যে এক জোর দেয় (জন্য পয়েন্টার টাইপ i
) যখন অন্যান্য (জন্য int- এ টাইপ উপর জোর দেয় *i
), কিন্তু যে হতে পারে সি এবং সি ++ ব্যবহারের 15 বছর পর, এটা ঠিক যে হয় যখন আমি এটি তাকান ছাড়া এটি সম্পর্কে চিন্তাভাবনা করা most most এই প্রশ্নটি জিজ্ঞাসা করা বেশিরভাগ প্রাথমিকের এখনও কিছু করতে পারে না।
এছাড়াও, এমনকি আমার পছন্দ অনুসারে, আমি অন্য স্টাইলে কোড পড়তে / লিখতে অসুবিধে পাই না। ধারাবাহিকতা, ব্লে ব্লা ব্লা।
এমনকি উল্লেখ করার প্রয়োজন নেই int * i
।
আমি পছন্দ করি int* i
(সি ++ - শৈলী)
ফলস্বরূপ চাক্ষুষ অস্পষ্টতা ( int* i, j
) এর কারণে আমি এক বিবৃতিতে একাধিক ভেরিয়েবল ঘোষণা করা এড়াতে পারি ।
যৌক্তিকতার জন্য বার্জন স্ট্রস্ট্রপের সি ++ স্টাইল এবং টেকনিকের এফএকিউও দেখুন ।
আপনি যদি একাধিক ভেরিয়েবল ঘোষনা করতে চান তবে তারকাচিহ্নটি পুনরাবৃত্তি করতে না চান:
template <typename T>
struct pointer_to
{
typedef T* type;
};
pointer_to<int>::type p1, p2, p3;
(আপনি যেমন স্ট্রাক্ট টেম্পলেটটির ভিতরে দেখতে পারেন, আমি int* i
শৈলীর পছন্দ করি ))
এবং এখানে আরও সাধারণ সমাধান:
template <typename T>
struct identity
{
typedef T type;
};
identity<int*>::type p1, p2, p3;
এটি কোনও "সমস্যাযুক্ত ধরণের" সাথে কাজ করে, উদাহরণস্বরূপ অ্যারে এবং রেফারেন্স:
identity<int[10]>::type a1, a2, a3;
identity<int&>::type r1(*p1), r2(*p2), r3(*p3);
typedef int* int_ptr
কৌতুকটি করত অবশ্যই, আমাকে বিভিন্ন পয়েন্টার ধরণের জন্য একটি নতুন টাইপিডেফ ঘোষণা করতে হবে, তবে বাস্তবে এটি কতটি হবে? সবচেয়ে বেশি আট?
int* i;
প্রথম অংশটি চলক প্রকার (পয়েন্টার টু ইনট) নির্দেশ করে অন্যদিকে দ্বিতীয় অংশটি ( i
) নির্দেশ করে I'd এটি টাইপ int
এবং নামটি আমার কাছে বোধগম্য হবে না *i
। এছাড়াও, int * i;
আমার কাছে কিছুটা গুণকের মতো দেখাচ্ছে।
আমি যে ঘোষণাগুলি ব্যবহার করি int * i;
তাতে আপনি এটি পড়েন i is a pointer to an integer
।
পয়েন্টারটি প্রকার এবং ভেরিয়েবল উভয় ক্ষেত্রে অবদান রাখে তাই এটি মাঝখানে হওয়া উচিত।
একই লাইনে একাধিক জিনিস ঘোষণা করা এড়ানো ভাল কাজ: int * i, j;
আমি আসলে তিনটি কনভেনশন নির্দিষ্ট পরিস্থিতিতে ব্যবহার করি। প্রথম নজরে আমি বেমানান বলে মনে করি, তবে ...
int *
শনাক্তকারী উপস্থিত না থাকলে, দৃশ্যমানভাবে বল প্রয়োগ করতে নামটি উপস্থিত নেই।int* intptr
উপর typedef
গুলি এবং অনুরূপ ঘোষণা চাক্ষুষরূপে শক্তিশালী করা যে ধরনের এটা অংশ। একইভাবে ফাংশন পয়েন্টার ঘোষণার সাথে:(int* (*foo)(int))
int *identifier
এবং class &identifier
ফাংশন পরামিতিগুলিতে দৃশ্যমানভাবে শক্তিশালী করতে যে প্যারামিটারটি সম্ভবত একটি তথাকথিত "আউট" পরামিতি।const int * const * const
যখনই আমি সিভি কোয়ালিফায়ার ব্যবহার করি ।int * foo;
স্থানীয় ঘোষণা।আমি অনুমান করি আমি কিছুটা দৃষ্টি নিবদ্ধ।
সি তে কোন পয়েন্টার টাইপ নেই! সুতরাং, "ইনট *" এর অর্থ কিছুই নেই। তারকাচিহ্নটি সর্বদা এর ডানদিকে লিখিত উপাদানটির সাথে আবদ্ধ থাকে, এটি তার ডানদিকে থাকা উপাদানটির সাথে সম্পর্কিত। "* আমি" একটি অন্তর্নিহিত। এবং * আমি একটি অন্তর্নিহিত কারণ, এটি অনুসরণ করে যে আমি ইন্টি পয়েন্টার। এটি এর পেছনে যুক্তি যুক্ত এবং সে কারণেই "ইনট * আই" হ'ল একমাত্র সম্ভাব্য সমাধান। অন্য সব কিছুই একটি মায়া (যা বেশিরভাগ ক্ষেত্রেই সংকলক স্বয়ংক্রিয়ভাবে সংশোধন করে)। সি ++ এবং সি # তে এটি আলাদা কিছু। তবে সি এর জন্য কেবল একটি বাইবেল রয়েছে: "ডেনিস এম রিচি: দ্য সি প্রোগ্রামিং ল্যাঙ্গুয়েজ"। ডেনিস (আরআইপি!) এটি লিখেছেন: "ইনট * আই"। এটি নিয়ে প্রশ্ন করার দরকার নেই।
int*
একটি পয়েন্টার টাইপ।