এর মান 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++খারাপ জিনিসগুলি দূরে সরিয়ে ফেলুন:)