วันนี้ผมมีเรื่องน่ารู้เล็กน้อยที่บางคนอาจจะยังไม่ทราบที เกี่ยวกับการใช้operator ในภาษา c มาให้นะครับ
เราลองเขียนcodeตามข้อมความด้านล่างดูนะครับ
#include <stdio.h>
int main () {
int x = 0;
int y = 0;
int z = 0;
printf("x = %d\n",x);
printf("y = %d\n",y);
printf("z = %d\n",z);
printf("x+1 = %d \n",x+1);
printf("y++ = %d \n",y++);
printf("++z = %d \n",++z);
return 0;
}
จะเกิดไรขึ้นอะ???
จากcodeดังกล่าวจะเห็นผลลัพธ์ออกมา
x = 0
y = 0
z = 0
x+1 = 1
y++ = 0
++z = 1
เอ.. y ทำไมมันแปลกกว่าเพื่อน
เหตุผลที่ y นั้นมีค่า = 0 นั้นเพราะว่า y++ มันจะทำการแสดงค่า y ก่อน แล้วค่อย + ค่าเข้าไปใน y อีก 1 หากเราลอง printf(“y = %d”,y); อีกครั้งหนึ่ง เราก็จะเห็นว่าค่า y ตอนนี้ก็จะ = 1 แล้ว
ทีนี้เราลองเอาการเพิ่มลดค่าต่างๆมาในเงื่อนไขกันนะครับ
ลองพิมพ์ code ตามด้านล่างดูนะครับ
#include <stdio.h>
int main () {
int x = 0;
int y = 0;
int z = 0;
if(x+1 == 1){
printf("x = %d\n",x);
}
if(y++ == 1){
printf("y = %d\n",y);
}
else{
printf("y != 1 and now y = %d\n",y);
}
if(++z == 1){
printf("z = %d\n",z);
}
return 0;
}
ผลลัพธ์ที่ออกมาจะเป็นไปตามด้านล้างนะครับ
x = 0
y != 1 and now y = 1
z = 1
เห็นได้ว่า
กรณี x
if จะทำการตรวจสอบค่าของ x ก่อนว่าเมื่อ x+1 เท่ากับ 1 หรือเปล่า ซึ่งเป็นจริง มันเลย print ค่า x ออกมาแต่ค่า x ออกมาเป็น 0 เพราะมันตรวจสอบค่า x อย่างเดียว แต่มันไม่ได้เปลี่ยนค่า x ดังนั้น x จึงยังมีค่า เท่ากับ 0 อยู่
กรณี y
if จะตรอจสอบจาก y++ ว่ามีค่าเท่ากับ 1 หรือไม่ แต่ y++ มันจะส่งค่า y ให้ if ตรวจสอบก่อนแล้วจึงเพิ่มค่า y ดังนั้นจึงไม่เข้ากรณี จึงได้ผลลัพธ์ของ else ซึ่ง print ผลลัพธ์ออกมาดังกล่าว และเห็นว่าค่า y ที่ถูก print ออกมาเท่ากับ 1 เพราะมันถูกเพิ่มค่าเข้าไปแล้ว แสดงว่าการเขียน y++ ในพวกเงื่อนไขต่างๆก็เป็นการเปลี่ยนค่าของตัวแปรด้วย ไม่เหมือนกับ x+1
กรณี z
if จะตรวจสอบ ค่าของ ++z ซึ่ง ++z มันจะเพิ่มค่า z ก่อนแล้วจึงส่งให้ if ตรวจสอบซึ่งเป็นจริง และค่า z ออกมาก็ได้เป็น 1 ซึ่งถูกเปลี่ยนค่าไปแล้ว
คงจะเห็นแล้วใช้มั้ยครับว่า ความแตกต่างระหว่าง +n (n = number) กับ ++ หวังว่าคงนำไปตรวจสอบ code ของตัวเองได้นะครับบางทีอาจเกิดความผิดพลาดตรงส่วนนี้ก็ได้
Last 5 posts by Emperor_bear
- Create blog and use Rich Editor in Groovy on Grails (grails-ui plugin) - February 22nd, 2010
- rails trick:disable and set default value to text field in rails - November 26th, 2009
- wonder hash in Ruby - November 24th, 2009
- มาเริ่มเขียน Objective-C กับ Xcode ซึโค่ย IDE - October 30th, 2009
- การขึ้นบรรทัดใหม่กับ Random Access File - August 17th, 2009
