สอบถามเกี่ยวกับภาษา c ครับเกี่ยวกับ ++a และ a++

เริ่มโดย nscyber, 27 กรกฎาคม 2013, 23:15:05

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

nscyber

เนื่องจากผมสงสัยว่า ตกลง z++ กับ ++z มันไม่ได้คำตอบเดียวกับหรอ z+1

พอดีผมเขียนโค้ดสองแบบ

อันนี้แบบ z++
#include <stdio.h>
#include <conio.h>
void main(){
int x=5,y=10,z=2,sum;
clrscr();
sum = x*y%(z++);
printf("a++ is : %d",sum);
getch();
}


อันนี้แบบ ++z
#include <stdio.h>
#include <conio.h>
void main(){
int x=5,y=10,z=2,sum;
clrscr();
sum = x*y%(++z);
printf("a++ is : %d",sum);
getch();
}


คำถามคืออันที่มี z++ ได้คำตอบคือ 2 ส่วนที่มีโค้ด ++z ได้ คำตอบคือ 0

คือผมสงสัยตกลง z++ กับ ++z มันไม่ได้เอา zไปบวก 1 หรอครับ คือ z มันไม่ได้เท่ากับ 3 หรอครับในกรณีนี้ ผมงงไปหมดแล้ว

เช่นอันนึงผมตั้ง
a=10
สรุปผมลองเช็ด
++a = 11
a++ = 10

ในหนังสือก้ขึ้นแบบนี้ตกลงารคิดเขาคิดยังไง

พรุ่งนี้สอบแล้วแงๆๆๆๆๆ

silkyland

ถ้า $a = 10;
$a++;
echo $a;

จะได้ 11
---
$b = 10
++$b;
echo $b;

จะได้ 11 เท่ากัน อ้างอิงจาก PHP

++ x   Pre-increment   Increments x by one, then returns x //เพิ่มค่า x ด้วย 1 ก่อนแล้วส่งค่า x
x ++   Post-increment   Returns x, then increments x by one //ส่งค่า x ก่อนแล้วเพิ่มค่า x ด้วย 1

ถ้าเป็นอย่างนี้จะเข้าใจมากขึ้น

$a = 10;
echo $a++;
ตอบ 10 //เพราะค่ายังไม่เพิ่มในบรรทัด $a++

$b = 10;
echo ++b;
ตอบ 11 
*Image Removed*

ohmohm

a++ หมายถึงทำอะไรบางอย่างกับ a ก่อน แล้วจึง ++
++a หมายถึงให้ ++ กับ a ก่อนแล้วค่อยใช้ค่า a
เช่น
char * a = "BCD";
char a1;
char a2;
a1 = *a++; // a1 จะได้อักษร B และ pointer a เลื่อนไป 1
a2 = *++a // a2 จะเลื่อนตำแหน่ง pointer ไปอีก 1 แล้วจึงอ้างค่า จึงได้ D

คงเป็นประโยชน์กับการสอบนะครับ

dekmv

++a บวกก่อนแล้วค่อยทำ
a++ ทำก่อนแล้วค่อยบวก

ครับ  :wanwan017:

teerdear1

คือ a++ กับ ++a มันไม่เหมือนกันนะครับ
ถ้าทดลองแบบนี้

int a = 10;
a++;
printf("a is : %d",a);
-----------------------------
int a = 10;
a++;
printf("a is : %d",a);

มันก็จะได้ผลลัพธ์ไม่ต่างกันครับ
คุณต้องลองแบบนี้ครับ

int a = 10;
printf("a is : %d",a++);
-----------------------------
int a = 10;
printf("a is : %d",++a);

ด้านบนจะได้ = 10
ด้านล่างจะได้ = 11

a++ แบบนี้มันจะยังไม่บวกค่าเพิ่มจนกว่าจะผ่านการทำงานนี้ไปครับ
แต่ถ้า ++a มันจะเพิ่มค่าทันที

ผิดถูกประการใดขออภัยด้วยคับ ไม่ได้เขียนภาษา C นานมากแล้ว -__-

nscyber


goodwide


seowizard

อ้างถึงจาก: dekmv ใน 27 กรกฎาคม 2013, 23:59:32
++a บวกก่อนแล้วค่อยทำ
a++ ทำก่อนแล้วค่อยบวก

ครับ  :wanwan017:

ถูกครับ

ถ้า a=0;
++a บวกก่อนแล้วค่อยทำ = 1
a++ ทำก่อนแล้วค่อยบวก = 0

seowizard

อ้างถึงจาก: seowizard ใน 28 กรกฎาคม 2013, 23:42:14
อ้างถึงจาก: dekmv ใน 27 กรกฎาคม 2013, 23:59:32
++a บวกก่อนแล้วค่อยทำ
a++ ทำก่อนแล้วค่อยบวก

ครับ  :wanwan017:

ถูกครับ

ถ้า a=0;
++a บวกก่อนแล้วค่อยทำ = 1
a++ ทำก่อนแล้วค่อยบวก = 0


เสริมอีกนิดนะครับ  ++a กับ a++ จะมีค่าเท่ากันก็ต่อเมื่อเราสั่ง printf("%d",a); หลังสิ้นสุดคำสั่งหรือ line of code นั้น เช่น

a=0;
++a;//หรือ a++
printf("%d",a);
คำตอบ คือ 1 เหมือนกัน

zatoli30

รับเขียนสคริปเก็บข้อมูลสินค้า ตามสั่ง Nordstrom,6pm,Zappos,Homedepot,etc...  [direct=https://www.facebook.com/MR.watcharaporn]สอบถาม[/direct]