এর মান s++
হ'ল s
ইনক্রিমেন্টের পূর্বে মূল মূল্য হ'ল পরবর্তী ক্রম বিন্দুর আগে একটি অনির্দিষ্ট সময়ে বৃদ্ধি হয়।
সুতরাং *s++
এবং *(s++)
সমতুল্য: এরা উভয়েরই মূল মূল্যকে অবজ্ঞা করে s
। আর একটি সমতুল্য অভিব্যক্তি হ'ল *(0, s++)
মূর্খতার জন্য নয়, এটি এইরকম:0[s++]
উল্লেখ্য তবে আপনার ফাংশন টাইপ ব্যবহার করা উচিত size_t
জন্য i
এবং তার রিটার্ন টাইপ:
size_t str_len(const char *s) {
size_t i = 0;
while (*s++) {
i++;
}
/* s points after the null terminator */
return i;
}
এখানে লুপ প্রতি একক বৃদ্ধি সহ একটি সম্ভাব্য আরও কার্যকর সংস্করণ:
size_t str_len(const char *s) {
const char *s0 = s;
while (*s++) {
/* nothing */
}
return s - 1 - s0;
}
যারা দ্বিতীয় অনুচ্ছেদে অদ্ভুত অভিব্যক্তিগুলি সম্পর্কে অবাক হন:
0, s++
কমা অপারেটরের একটি উদাহরণ ,
যা এর বাম অংশটি মূল্যায়ন করে, তার ডান অংশটি যা এর মান গঠন করে। সুতরাং (0, s++)
সমতুল্য (s++)
।
0[s++]
সমতূল্য (s++)[0]
এবং *(0 + s++)
বা *(s++ + 0)
যা প্রক্রিয়া সহজ *(s++)
। পয়েন্টার এবং সূচক এক্সপ্রেশনগুলিতে []
প্রকাশের স্থানান্তর খুব সাধারণ বা বিশেষভাবে কার্যকর নয় তবে এটি সি স্ট্যান্ডার্ডের সাথে সঙ্গতিপূর্ণ।
, s++
খারাপ জিনিসগুলি দূরে সরিয়ে ফেলুন:)