সি পয়েন্টারে কীভাবে অগ্রাধিকার নির্ধারণ করা হয়?


14

আমি দুটি পয়েন্টার ঘোষণাপত্র পেরিয়ে এসেছি যা বুঝতে আমার সমস্যা হচ্ছে। আমার অগ্রাধিকার সংক্রান্ত নিয়মগুলি সম্পর্কে কিছু বোঝা যায়:

Operator             Precedence             Associativity
(), [ ]                  1                  Left to Right
*, identifier            2                  Right to Left
Data type                3

তবে এটি দেওয়া হলেও, নিম্নলিখিত উদাহরণগুলি কীভাবে সঠিকভাবে মূল্যায়ন করা যায় তা আমি বুঝতে পারি না:

প্রথম উদাহরণ

float * (* (*ptr)(int))(double **,char c)

আমার মূল্যায়ন:

  1. *(ptr)
  2. (int)
  3. *(*ptr)(int)
  4. *(*(*ptr)(int))

তারপর,

  1. double **
  2. char c

দ্বিতীয় উদাহরণ

unsigned **( * (*ptr) [5] ) (char const *,int *)
  1. *(ptr)
  2. [5]
  3. *(*ptr)[5]
  4. *(*(*ptr)[5])
  5. **(*(*ptr)[5])

এগুলি আমার কীভাবে পড়া উচিত ?


1
কোনও ভাষা কীভাবে এর বৈশিষ্ট্যগুলি পরিচালনা করে তা এখানে জিজ্ঞাসা করা is

উত্তর:


7

প্রথমটির জন্য আমার অনুমান : পিটিআর হ'ল একটি ফাংশনটির পয়েন্টার যা প্যারামিটার হিসাবে একটি ইনট নেয় এবং পয়েন্টারটিকে পয়েন্টার হিসাবে পয়েন্টার হিসাবে ডাবল এবং একটি চরকে নেয় এবং একটি পয়েন্টারটি ভাসতে ফেরত দেয়।

ব্যাখ্যা :

(* কাজ খুঁজছেন এরকম) (int- এ)

বলে যে পিটিআর হ'ল একটি ফাংশনের পয়েন্টার হিসাবে আর্গুমেন্ট হিসাবে ইন্টিগ্রেশন গ্রহণ করে। এই ফাংশনটি কী দেয় তা আবিষ্কার করার জন্য আমাদের দৃষ্টিভঙ্গি প্রসারিত করতে হবে:

(* (* পিটিআর) (ইনট্রি))

এর অর্থ ফাংশনটি অন্য ফাংশনে একটি পয়েন্টার দেয়। অন্যান্য ফাংশনের প্যারামিটারগুলি হ'ল:

(ডাবল **, চর গ)

এবং এটি ফিরে আসে

ভাসা *

এবং দ্বিতীয়টির জন্য : পিটিআর হ'ল পাঁচটি পয়েন্টারের একটি অ্যারের পয়েন্টার যা ফাংশনগুলিকে পরামিতি হিসাবে গ্রহণ করে একটি ধ্রুবক পয়েন্টার এবং চার্চের একটি পয়েন্টার, স্বাক্ষরযুক্ত স্বাক্ষরের কোন পয়েন্টারে ফিরে যায়।

ব্যাখ্যা :

(* (* পিটিআর) [৫])

ফাংশন গ্রহণের জন্য পাঁচটি পয়েন্টারের অ্যারে পয়েন্টার হিসাবে পিটিআর ঘোষণা করে

(চর কনস্ট *, ইনট *)

যুক্তি এবং ফিরে হিসাবে

স্বাক্ষরবিহীন **


7

এই পাগল ঘোষণাগুলি বুঝতে আপনি 'ক্লকওয়াইজ সর্পিল' পদ্ধতিটি চেষ্টা করতে পারেন:

http://c-faq.com/decl/spiral.anderson.html

আমি এটি সম্পর্কে এখানে ব্লগও করেছি:

http://www.kalekold.net/index.php?post=4


উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ. তবে ক্লকওয়াইজ সর্পিল পদ্ধতিতে আমার ক্ষেত্রে কোথা থেকে শুরু হবে? লিঙ্কে দেওয়া উদাহরণগুলিতে সহজ উদাহরণ রয়েছে। আমি আমার পদ্ধতির সাথে এই পদ্ধতির সাথে মেলে ধরতে পারছি না।
ট্র্যাপাঙ্ক

1
আপনার নিজের সনাক্তকারী: পিটিআর থেকে শুরু করা উচিত। আপনার কাছে থাকবে: "পিটিআর হ'ল একটি ফাংশনের পয়েন্টার যা কোনও ইনট নেয় এবং একটি ফাংশনটিতে একটি পয়েন্টার দেয় যা একটি পয়েন্টারকে একটি ডাবল এবং একটি চরে নিয়ে যায় এবং একটি পয়েন্টারটিকে একটি ফ্লোটে ফেরত দেয়"। স্পাইটারাল চেষ্টা করুন এবং আপনি একই পাবেন।
রেমো.ডে

1

এটি একটি ফাংশন পয়েন্টার। যে ব্যক্তি এটি লিখেছেন তিনি আরও স্পষ্ট করার জন্য টাইপডেফের আরও ভাল ব্যবহার করতে পারতেন।

এই পরামিতিগুলির সাথে কার্য সম্পাদনের ক্ষেত্রে এটি কার্যকরভাবে একটি পয়েন্টার। ভাসা * মাইফ্যাঙ্ক (ডাবল **, চর)


4
আমার বাজি হ'ল যে ব্যক্তি এটি লিখেছিল সে শিক্ষক।
mouviciel

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

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