সি তে, ব্যবহার ++i
এবং এর মধ্যে পার্থক্য কী i++
এবং কোন for
লুপের ইনক্রিমেন্টেশন ব্লকে ব্যবহার করা উচিত ?
সি তে, ব্যবহার ++i
এবং এর মধ্যে পার্থক্য কী i++
এবং কোন for
লুপের ইনক্রিমেন্টেশন ব্লকে ব্যবহার করা উচিত ?
উত্তর:
++i
এর মান বাড়িয়ে তুলবে i
এবং তারপরে বর্ধিত মানটি প্রদান করবে।
i = 1;
j = ++i;
(i is 2, j is 2)
i++
এর মান বাড়িয়ে তুলবে i
, তবে i
বাড়ানোর আগে যে মূল মূল্য ছিল তা ফেরত দেবে ।
i = 1;
j = i++;
(i is 2, j is 1)
একটি for
লুপ জন্য, হয় কাজ করে। ++i
আরও সাধারণ বলে মনে হচ্ছে, সম্ভবত এটিই কে ওআরটিতে ব্যবহৃত হয় ।
যাই হোক না কেন, গাইডলাইনটি " ++i
বেশি পছন্দ করুন" অনুসরণ করুন i++
এবং আপনার কোনও ভুল হবে না।
এর দক্ষতা ++i
এবং সম্পর্কে বেশ কয়েকটি মন্তব্য রয়েছে i++
। যে কোনও নন-স্টুডেন্ট-প্রজেক্ট সংকলনে, পারফরম্যান্সের পার্থক্য থাকবে না। আপনি উত্পন্ন কোডটি দেখে যাচাই করতে পারেন, যা অভিন্ন হবে।
দক্ষতার প্রশ্নটি আকর্ষণীয় ... এখানে একটি উত্তরের আমার চেষ্টা: সি + তে আই ++ এবং ++ i এর মধ্যে পারফরম্যান্সের পার্থক্য রয়েছে কি?
@ অনফ্রেন্ড নোট হিসাবে , এটি একটি সি ++ অবজেক্টের জন্য পৃথক, যেহেতু operator++()
একটি ফাংশন এবং সংকলক অন্তর্বর্তী মান ধরে রাখতে একটি অস্থায়ী বস্তুর তৈরি অপ্টিমাইজ করতে জানতে পারে না।
for(int i=0; i<10; i++){ print i; }
এটি for(int i=0; i<10; ++i){ print i; }
আমার বোঝার চেয়ে আলাদা হবে না যে কিছু ভাষা আপনাকে ব্যবহার করবে তার উপর নির্ভর করে বিভিন্ন ফলাফল দেয়।
i++
কারণ এটি "অপারেন্ড-অপারেটর" ফর্মের, একটি অ্যাসাইনমেন্ট "অপারেন্ড-অপারেটর-মান" of অন্য কথায়, লক্ষ্য অপারেন্ডটি যেমন একটি অ্যাসাইনমেন্ট স্টেটমেন্টে থাকে ঠিক তেমনই অভিব্যক্তিটির বাম দিকে থাকে।
i++
এবং print i
বিভিন্ন বিবৃতি আছে, কিন্তু কারণ i++;
এবং i<10
আছে। @ জনিফ্ল্যাশের মন্তব্যটি ভিত্তি নয়। ধরুন আপনার আছে for(int i=0; i++<10){ print i; }
এবং for(int i=0; ++i<10){ print i; }
। @ Jhnnyflash প্রথম মন্তব্যে বর্ণিতভাবে এগুলি ভিন্নভাবে পরিচালিত হবে।
i ++ পোস্ট বর্ধন হিসাবে পরিচিত যেখানে ++ i বলা হয় প্রাক বৃদ্ধি।
i++
i++
পোস্ট ইনক্রিমেন্ট কারণ i
ক্রিয়াকলাপ শেষ হওয়ার পরে এটির মান 1 বৃদ্ধি করে।
নীচের উদাহরণটি দেখতে দিন:
int i = 1, j;
j = i++;
এখানে j = 1
কিন্তু মান i = 2
। এখানে এর আগে প্রথমে i
নির্ধারিত হবে এর মান বাড়ানো হবে।j
i
++i
++i
পূর্ববৃদ্ধি হ'ল কারণ এটি i
অপারেশনের আগে 1 এর মান বৃদ্ধি করে। এর অর্থ j = i;
কার্যকর হবে পরে i++
।
নীচের উদাহরণটি দেখতে দিন:
int i = 1, j;
j = ++i;
এখানে j = 2
কিন্তু মান i = 2
। এখানে এর মান বাড়ানোর পরে i
নির্ধারিত হবে । একইভাবে আগে মৃত্যুদন্ড কার্যকর করা হবে ।j
i
i
++i
j=i;
আপনার প্রশ্নের জন্য কোনটি লুপের জন্য বৃদ্ধি ব্লকে ব্যবহার করা উচিত? উত্তরটি হ'ল, আপনি যে কোনও একটি ব্যবহার করতে পারেন .. তাতে কিছু আসে যায় না। এটি আপনার লুপের জন্য একই নম্বর। সময়ের।
for(i=0; i<5; i++)
printf("%d ",i);
এবং
for(i=0; i<5; ++i)
printf("%d ",i);
উভয় লুপ একই আউটপুট উত্পাদন করবে। অর্থাত 0 1 2 3 4
।
আপনি কেবল এটি কোথায় ব্যবহার করছেন তা বিবেচ্য।
for(i = 0; i<5;)
printf("%d ",++i);
এই ক্ষেত্রে আউটপুট হবে 1 2 3 4 5
।
কোনটি "দ্রুত" তার মধ্যে "দক্ষতা" (গতি, সত্যই) সম্পর্কে চিন্তা করবেন না। আমাদের আজকাল সংকলক রয়েছে যা এই জিনিসগুলির যত্ন নেয়। যে কোনও একটি ব্যবহার করতে বোধগম্য হন তা ব্যবহার করুন, এর ভিত্তিতে আরও স্পষ্টভাবে আপনার উদ্দেশ্যটি দেখায়।
operator++(int)
(পোস্টফিক্স সংস্করণ) এর মধ্যে কোডটিতে বেশ কিছুটা একটি অস্থায়ী তৈরি করতে হয় যা ফিরে আসবে। আপনি কি নিশ্চিত যে কম্পাইলাররা সর্বদা এটি অপ্টিমাইজ করতে পারে?
++i
মান বৃদ্ধি করে, তারপরে এটি প্রদান করে।
i++
মান প্রদান করে এবং তারপরে এটি বৃদ্ধি করে।
এটি একটি সূক্ষ্ম পার্থক্য।
লুপের জন্য, ব্যবহার করুন ++i
কারণ এটি কিছুটা দ্রুত। i++
কেবলমাত্র ফেলে দেওয়া হবে এমন একটি অতিরিক্ত অনুলিপি তৈরি করবে।
i++
: এই দৃশ্যে প্রথমে মান নির্ধারিত হয় এবং তারপরে বৃদ্ধি ঘটে।
++i
: এই দৃশ্যে প্রথমে ইনক্রিমেন্ট সম্পন্ন হয় এবং তারপরে মান নির্ধারিত হয়
নীচে চিত্রের দৃশ্যায়ন রয়েছে এবং এখানে একটি দুর্দান্ত ব্যবহারিক ভিডিও রয়েছে যা একই চিত্র প্রদর্শন করে।
কারণ ++i
পারেন সামান্য দ্রুত চেয়ে i++
করা হয় যে, i++
আগে এটি বৃদ্ধি পরার তোমার মান একটি স্থানীয় অনুলিপি প্রয়োজন হতে পারে, যখন ++i
করে না। কিছু ক্ষেত্রে, কিছু সংকলক যদি সম্ভব হয় তবে এটি অপ্টিমাইজ করবে ... তবে এটি সর্বদা সম্ভব নয় এবং সমস্ত সংকলক এটি করেন না।
আমি কম্পাইলার অপ্টিমাইজেশনের উপর খুব বেশি নির্ভর না করার চেষ্টা করি, তাই আমি রায়ান ফক্সের পরামর্শটি মেনে চলি: যখন আমি উভয় ব্যবহার করতে পারি, তখন আমি ব্যবহার করি ++i
।
i
আপনি যখন কোনও বিবৃতি লিখবেন তখন মান 1 এর চেয়ে বেশি মানের কোনও "স্থানীয় অনুলিপি" নেই 1;
।
কোনও লুপে ব্যবহারের কার্যকর ফলাফলটি অভিন্ন। অন্য কথায়, লুপ দুটি ক্ষেত্রে একই একই কাজ করবে।
দক্ষতার দিক থেকে, আমি ++ ওভার ++ i বেছে নেওয়ার সাথে জরিমানা থাকতে পারে। ভাষা বৈশিষ্টের ক্ষেত্রে, পোস্ট-ইনক্রিমেন্ট অপারেটর ব্যবহার করে অপারেটর যে মানটির উপর আচরণ করছে তার একটি অতিরিক্ত কপি তৈরি করা উচিত। এটি অতিরিক্ত অপারেশনের উত্স হতে পারে।
তবে পূর্ববর্তী যুক্তি নিয়ে আপনার দুটি প্রধান সমস্যা বিবেচনা করা উচিত।
আধুনিক সংকলক দুর্দান্ত। সমস্ত ভাল সংকলক এটি স্মরণ করার জন্য যথেষ্ট স্মার্ট যে এটি কোনও লুপের জন্য একটি পূর্ণসংখ্যা বৃদ্ধি দেখছে, এবং এটি উভয় পদ্ধতিকে একই দক্ষ কোডে অনুকূলিত করবে। প্রি-ইনক্রিমেন্টের বেশি পোস্ট-ইনক্রিমেন্ট ব্যবহার করা যদি প্রকৃতপক্ষে আপনার প্রোগ্রামকে ধীর সময় হিসাবে চালিত করে, তবে আপনি একটি ভয়ঙ্কর সংকলক ব্যবহার করছেন ।
অপারেশনাল সময়-জটিলতার পরিপ্রেক্ষিতে দুটি পদ্ধতি (এমনকি যদি একটি অনুলিপি আসলে সম্পাদন করা হয়) সমান। লুপের ভিতরে যে নির্দেশাবলীর সম্পাদনা করা হচ্ছে তাতে বর্ধিত ক্রিয়াকলাপের ক্রিয়াকলাপের সংখ্যা উল্লেখযোগ্যভাবে আধিপত্য করা উচিত। অতএব, উল্লেখযোগ্য আকারের যে কোনও লুপে, ইনক্রিমেন্ট পদ্ধতির পেনাল্টিটি লুপ বডি প্রয়োগের মাধ্যমে ব্যাপকভাবে ছড়িয়ে পড়বে। অন্য কথায়, আপনি ইনক্রিমেন্টের চেয়ে লুপের কোডটি অপ্টিমাইজ করার বিষয়ে চিন্তিত হওয়ার চেয়ে অনেক ভাল।
আমার মতে পুরো ইস্যুটি কেবল স্টাইলের পছন্দকেই ফোটায়। আপনি যদি ভাবেন যে প্রাক-বর্ধন আরও বেশি পঠনযোগ্য, তবে এটি ব্যবহার করুন। ব্যক্তিগতভাবে, আমি পোস্ট-ইনক্রমেন্টটি বেশি পছন্দ করি তবে এটি সম্ভবত কারণ এটিই ছিল যা আমি অপটিমাইজেশন সম্পর্কে কিছু জানার আগেই শেখানো হয়েছিল।
এটি অকাল অপটিমাইজেশনের একটি পঞ্চম উদাহরণ, এবং এর মতো বিষয়গুলি আমাদের ডিজাইনের গুরুতর সমস্যাগুলি থেকে বিভ্রান্ত করার সম্ভাবনা রাখে। এটি জিজ্ঞাসা করা এখনও একটি ভাল প্রশ্ন, তবে "সেরা অনুশীলনে" ব্যবহার বা sensক্যমত্যের কোনও মিল নেই।
তারা উভয়ই সংখ্যা বৃদ্ধি করে। ++i
সমতূল্য i = i + 1
।
i++
এবং ++i
খুব মিল কিন্তু ঠিক একই নয়। উভয়ই সংখ্যা বৃদ্ধি করে, তবে ++i
বর্তমান প্রকাশের আগে মূল্যায়ন করার আগে সংখ্যাটি বৃদ্ধি করে, যেখানে i++
অভিব্যক্তিটি মূল্যায়নের পরে সংখ্যা বৃদ্ধি করে।
উদাহরণ:
int i = 1;
int x = i++; //x is 1, i is 2
int y = ++i; //y is 3, i is 3
++i
(প্রিফিক্স অপারেশন): বৃদ্ধি এবং তারপর মান নির্ধারণ
(যেমন): int i = 5
, int b = ++i
এই ক্ষেত্রে, 6 থেকে 7 এবং তাই প্রথম এবং তারপর বাড়তি b নির্ধারিত হয়।
i++
(Postfix অপারেশন): নির্ধারণ এবং তারপর মান বৃদ্ধি
(যেমন): int i = 5
, int b = i++
এই ক্ষেত্রে, 5 6 এবং তাই প্রথম এবং তারপর বাড়তি b নির্ধারিত হয়।
লুপের ক্ষেত্রে অন্তর্ভুক্ত: i++
বেশিরভাগ ক্ষেত্রে ব্যবহৃত হয় কারণ সাধারণত আমরা i
লুপের জন্য বাড়ানোর আগে শুরুর মানটি ব্যবহার করি । তবে আপনার প্রোগ্রামের যুক্তির উপর নির্ভর করে এটি ভিন্ন হতে পারে।
আমি ধরে নিয়েছি আপনি এখন শব্দার্থবিজ্ঞানের পার্থক্য বুঝতে পেরেছেন (যদিও সত্যই আমি অবাক হই যে লোকেরা স্ট্যাক ওভারফ্লো সম্পর্কে পড়ার পরিবর্তে 'অপারেটর এক্স এর অর্থ কী' প্রশ্ন জিজ্ঞাসা করে, আপনি জানেন যে কোনও বই বা ওয়েব টিউটোরিয়াল বা অন্য কিছু)।
তবে যাইহোক, কোনটি ব্যবহার করা উচিত, পারফরম্যান্সের প্রশ্নগুলিকে উপেক্ষা করুন, যা সি ++ তেও অসম্ভব গুরুত্বপূর্ণ। কোনটি ব্যবহার করবেন তা সিদ্ধান্ত নেওয়ার সময় আপনার এই নীতিটি ব্যবহার করা উচিত:
কোডে আপনি কী বোঝাতে চান তা বলুন।
আপনার বিবৃতিতে যদি মূল্য-পূর্ব-বর্ধনের প্রয়োজন না হয় তবে অপারেটরের সেই ফর্মটি ব্যবহার করবেন না। এটি একটি ছোটখাটো সমস্যা, তবে আপনি যদি এমন স্টাইল গাইডের সাথে কাজ না করেন যা সম্পূর্ণরূপে অন্যের পক্ষে (একটি হাড়-মাথাযুক্ত স্টাইল গাইড) একটি সংস্করণকে নিষিদ্ধ করে, তবে আপনি যে ফর্মটি ব্যবহার করছেন তা হ'ল প্রকাশ করবে।
কিউইডি, প্রাক-বর্ধিত সংস্করণটি ব্যবহার করুন:
for (int i = 0; i != X; ++i) ...
পার্থক্যটি নীচের এই সাধারণ সি ++ কোড দ্বারা বোঝা যাবে:
int i, j, k, l;
i = 1; //initialize int i with 1
j = i+1; //add 1 with i and set that as the value of j. i is still 1
k = i++; //k gets the current value of i, after that i is incremented. So here i is 2, but k is 1
l = ++i; // i is incremented first and then returned. So the value of i is 3 and so does l.
cout << i << ' ' << j << ' ' << k << ' '<< l << endl;
return 0;
মূল পার্থক্য হ'ল
- i ++ পোস্ট ( বৃদ্ধির পরে ) এবং
++ আমি প্রাক ( বৃদ্ধির আগে )
i =1
লুপের ইনক্রিমেন্ট পছন্দ হলে পোস্ট করুন1,2,3,4,n
- প্রাক
i =1
লুপ বৃদ্ধি যদি পছন্দ2,3,4,5,n
এই সামান্য কোডটি ইতিমধ্যে পোস্ট করা উত্তরগুলির চেয়ে আলাদা কোণ থেকে পার্থক্যটি কল্পনা করতে সহায়তা করতে পারে:
int i = 10, j = 10;
printf ("i is %i \n", i);
printf ("i++ is %i \n", i++);
printf ("i is %i \n\n", i);
printf ("j is %i \n", j);
printf ("++j is %i \n", ++j);
printf ("j is %i \n", j);
ফলাফলটি হ'ল:
//Remember that the values are i = 10, and j = 10
i is 10
i++ is 10 //Assigns (print out), then increments
i is 11
j is 10
++j is 11 //Increments, then assigns (print out)
j is 11
পরিস্থিতিতে আগে এবং পরে মনোযোগ দিন।
লুপের জন্য একটি ইনক্রিমেন্টেশন ব্লকে যার মধ্যে একটি ব্যবহার করা উচিত, আমি মনে করি যে সিদ্ধান্ত নিতে আমরা সবচেয়ে ভাল করতে পারি তা একটি ভাল উদাহরণ ব্যবহার করে:
int i, j;
for (i = 0; i <= 3; i++)
printf (" > iteration #%i", i);
printf ("\n");
for (j = 0; j <= 3; ++j)
printf (" > iteration #%i", j);
ফলাফলটি হ'ল:
> iteration #0 > iteration #1 > iteration #2 > iteration #3
> iteration #0 > iteration #1 > iteration #2 > iteration #3
আমি আপনার সম্পর্কে জানি না, তবে কমপক্ষে লুপের জন্য আমি এর ব্যবহারে কোনও পার্থক্য দেখছি না।
নিম্নলিখিত সি কোড খণ্ডটি পূর্ব এবং পোস্ট বৃদ্ধি এবং হ্রাস অপারেটরগুলির মধ্যে পার্থক্য চিত্রিত করে:
int i;
int j;
বর্ধক অপারেটর:
i = 1;
j = ++i; // i is now 2, j is also 2
j = i++; // i is now 3, j is 2
প্রাক ক্রিমেন্ট মানে একই লাইনে ইনক্রিমেন্ট। পোস্ট-ইনক্রিমেন্ট মানে লাইন কার্যকর হওয়ার পরে বৃদ্ধি।
int j=0;
System.out.println(j); //0
System.out.println(j++); //0. post-increment. It means after this line executes j increments.
int k=0;
System.out.println(k); //0
System.out.println(++k); //1. pre increment. It means it increments first and then the line executes
এটি যখন ওআর এবং অপারেটরগুলির সাথে আসে তখন এটি আরও আকর্ষণীয় হয়ে ওঠে।
int m=0;
if((m == 0 || m++ == 0) && (m++ == 1)) { //false
/* in OR condition if first line is already true then compiler doesn't check the rest. It is technique of compiler optimization */
System.out.println("post-increment "+m);
}
int n=0;
if((n == 0 || n++ == 0) && (++n == 1)) { //true
System.out.println("pre-increment "+n); //1
}
অ্যারেতে
System.out.println("In Array");
int[] a = { 55, 11, 15, 20, 25 } ;
int ii, jj, kk = 1, mm;
ii = ++a[1]; // ii = 12. a[1] = a[1] + 1
System.out.println(a[1]); //12
jj = a[1]++; //12
System.out.println(a[1]); //a[1] = 13
mm = a[1];//13
System.out.printf ( "\n%d %d %d\n", ii, jj, mm ) ; //12, 12, 13
for (int val: a) {
System.out.print(" " +val); //55, 13, 15, 20, 25
}
সি ++ পোস্টে / পয়েন্টার ভেরিয়েবলের প্রাক-বৃদ্ধি
#include <iostream>
using namespace std;
int main() {
int x=10;
int* p = &x;
std::cout<<"address = "<<p<<"\n"; //prints address of x
std::cout<<"address = "<<p<<"\n"; //prints (address of x) + sizeof(int)
std::cout<<"address = "<<&x<<"\n"; //prints address of x
std::cout<<"address = "<<++&x<<"\n"; //error. reference can't re-assign because it is fixed (immutable)
}
কিছুদিন:
++i
এবং i++
যদি আপনি কোনও ফাংশনে এগুলি লিখছেন না তবে একই কাজ করে। আপনি যদি এর মতো কিছু ব্যবহার করেন function(i++)
বা function(++i)
পার্থক্যটি দেখতে পারেন।
function(++i)
প্রথম বর্ধিত i কে 1 বলে, এর পরে এটি i
নতুন মান সহ ফাংশনে রাখবে।
function(i++)
1 দ্বারা i
যে বৃদ্ধি পরে ফাংশন প্রথম রাখে বলে i
।
int i=4;
printf("%d\n",pow(++i,2));//it prints 25 and i is 5 now
i=4;
printf("%d",pow(i++,2));//it prints 16 i is 5 now
int j = ++i;
এবং int k = i++;
তার মধ্যে পার্থক্য রয়েছে ।
কেবলমাত্র পার্থক্য হ'ল ভেরিয়েবলের বর্ধিতকরণ এবং অপারেটর যে মূল্য দেয় তার মধ্যে ক্রিয়াকলাপ।
এই কোড এবং এর আউটপুট পার্থক্য ব্যাখ্যা করে:
#include<stdio.h>
int main(int argc, char* argv[])
{
unsigned int i=0, a;
a = i++;
printf("i before: %d; value returned by i++: %d, i after: %d\n", i, a, i);
i=0;
a = ++i;
printf("i before: %d; value returned by ++i: %d, i after: %d\n", i, a, i);
}
আউটপুট হল:
i before: 1; value returned by i++: 0, i after: 1
i before: 1; value returned by ++i: 1, i after: 1
সুতরাং মূলত ++i
এটি বাড়ানোর পরে মানটি প্রদান করে, যখন বর্ধিত ++i
হওয়ার আগে মানটি ফেরত দেয়। শেষে, উভয় ক্ষেত্রেই i
এর মান বাড়বে।
আরেকটি উদাহরণ:
#include<stdio.h>
int main ()
int i=0;
int a = i++*2;
printf("i=0, i++*2=%d\n", a);
i=0;
a = ++i * 2;
printf("i=0, ++i*2=%d\n", a);
i=0;
a = (++i) * 2;
printf("i=0, (++i)*2=%d\n", a);
i=0;
a = (++i) * 2;
printf("i=0, (++i)*2=%d\n", a);
return 0;
}
আউটপুট:
i=0, i++*2=0
i=0, ++i*2=2
i=0, (++i)*2=2
i=0, (++i)*2=2
প্রত্যাশিত মানটি যখন অন্য পরিবর্তনশীলকে বরাদ্দ করা হয় বা যখন অন্যান্য ক্রিয়াকলাপের সাথে সংযোজনে যখন ক্রমবৃদ্ধি সম্পাদন করা হয় যেখানে অপারেশন অগ্রাধিকার প্রয়োগ করা হয় (এর i++*2
চেয়ে আলাদা হয় ++i*2
, (i++)*2
এবং (++i)*2
একই মানটি ফেরত দেয়) তখন পার্থক্যগুলি স্পষ্ট হয় যখন তারা বিনিময়যোগ্য হয়। লুপ সিনট্যাক্সের জন্য একটি শাস্ত্রীয় উদাহরণ হ'ল:
for(int i=0; i<10; i++)
এর একই প্রভাব রয়েছে
for(int i=0; i<10; ++i)
দুটি অপারেটরের মধ্যে কোনও বিভ্রান্তি না করার জন্য আমি এই নিয়মটি গ্রহণ করেছি:
অ্যাসাইনমেন্টের সাথে অপারেশনের ক্রমের সাথে ++
চলকের সাথে সম্পর্কিত অপারেটরের অবস্থানকে যুক্ত করুনi
++
অন্য কথায় বলেছেন:
++
এর আগে অ্যাসাইনমেন্টের আগেi
বর্ধিতকরণ অবশ্যই করা উচিত ;++
পরে i
মানে incrementation সম্পন্ন করা আবশ্যক পর নিয়োগ:a = i ++ এর অর্থ একটিতে বর্তমান i মান a = ++ মানে একটি ইনক্রিমেন্টযুক্ত মান থাকে
a = i++;
এর অর্থ হ'ল সঞ্চিত a
মানটি i
ইনক্রিমেন্টের পূর্বে মান হবে তবে 'ইনক্রিমেন্টিং ছাড়াই' বোঝায় যে i
বর্ধিত নয়, যা সম্পূর্ণ ভুল - i
বর্ধিত হয়, তবে অভিব্যক্তির মান বর্ধনের আগে মূল্য।
পার্থক্যটি বোঝার উদাহরণ এখানে
int i=10;
printf("%d %d",i++,++i);
আউটপুট: 10 12/11 11
(ফাংশনটিতে আর্গুমেন্টের মূল্যায়নের ক্রমের উপর নির্ভর করে printf
, যা সংকলক এবং আর্কিটেকচারে পৃথক হয়)
ব্যাখ্যা:
i++
-> i
মুদ্রিত হয় এবং তারপরে বৃদ্ধি হয়। (প্রিন্ট 10, তবে i
11 হবে)
++i
-> i
মান বৃদ্ধি এবং মান মুদ্রণ। (প্রিন্ট 12, এবং i
এছাড়াও 12 এর মান )
i++
++i