C (ພາສາການຂຽນໂປແກຼມ): ຄວາມແຕກຕ່າງລະຫວ່າງ: ++ a ແລະ a = a + 1 ແມ່ນຫຍັງ?


ຕອບ 1:

ບໍ່ມີຄວາມແຕກຕ່າງ. ++ a, a + = 1 ແລະ a = a + 1 ແມ່ນໂດຍ ຄຳ ນິຍາມການສະແດງອອກທີ່ຄ້າຍຄືກັນ (ໝາຍ ຄວາມວ່າພາສາທີ່ ກຳ ນົດໃຫ້ພວກມັນໃນທາງນີ້).

ໃນທັງສາມກໍລະນີ, ຜົນຂອງການສະແດງອອກແມ່ນ ສຳ ເນົາຂອງຄ່າທີ່ມັນຂຽນໃນ "a" (a ++ ແຕກຕ່າງກັນແນ່ນອນໃນຜົນໄດ້ຮັບແມ່ນ ສຳ ເນົາຂອງມູນຄ່າທີ່ມັນອ່ານຈາກ "a").

ຄວາມແຕກຕ່າງພຽງແຕ່ວ່າຖ້າ "a" ແມ່ນການສະແດງອອກທີ່ສັບສົນກວ່າເຊັ່ນການເອີ້ນຟັງຊັນ, ມັນຖືກເອີ້ນສອງຄັ້ງໃນ "a = a + 1" ແລະບູລິມະສິດຂອງວຽກນີ້ແມ່ນຕ່ ຳ ຫຼາຍກວ່າທີ່ ++ ມອບ ໝາຍ ແທນ ++ ບາງຄັ້ງຕ້ອງໃຊ້ວົງເລັບເພີ່ມເຕີມ: ++ a + ++ b ແມ່ນຂຽນງ່າຍກວ່າ (a + = 1) + (b + = 1) ຫຼື (a = a + 1) + (b = b + 1)


ຕອບ 2:

++ a ແລະ a +1 ແມ່ນຄ້າຍຄືກັນ, ແຕ່ບັນຫາເກີດຂື້ນເມື່ອທ່ານໃຊ້ຕົວແປຫຼາຍກ່ວາ ໜຶ່ງ ຕົວແປ.

ຕົວຢ່າງ:

int a = 10, b;

++ a => ເພີ່ມມູນຄ່າເພີ່ມຕໍ່ ໜຶ່ງ (o / p: a = 11)

a ++ => ເພີ່ມມູນຄ່າເພີ່ມຂື້ນ ໜຶ່ງ (o / p: a = 11))

b = a ++ => ທຳ ອິດໃຫ້ຄ່າຄ່າ a ແລະຫຼັງຈາກນັ້ນເພິ່ມຂື້ນ 0ne (o / p: a = 11, b = 10)

b = ++ a => ຄ່າ ທຳ ອິດ a ແມ່ນເພີ່ມຂື້ນ ໜຶ່ງ ແລະຫຼັງຈາກນັ້ນໄດ້ຖືກມອບ ໝາຍ ໃຫ້ b (o / p: a = 11, b = 11)


ຕອບ 3:

++ a ແລະ a +1 ແມ່ນຄ້າຍຄືກັນ, ແຕ່ບັນຫາເກີດຂື້ນເມື່ອທ່ານໃຊ້ຕົວແປຫຼາຍກ່ວາ ໜຶ່ງ ຕົວແປ.

ຕົວຢ່າງ:

int a = 10, b;

++ a => ເພີ່ມມູນຄ່າເພີ່ມຕໍ່ ໜຶ່ງ (o / p: a = 11)

a ++ => ເພີ່ມມູນຄ່າເພີ່ມຂື້ນ ໜຶ່ງ (o / p: a = 11))

b = a ++ => ທຳ ອິດໃຫ້ຄ່າຄ່າ a ແລະຫຼັງຈາກນັ້ນເພິ່ມຂື້ນ 0ne (o / p: a = 11, b = 10)

b = ++ a => ຄ່າ ທຳ ອິດ a ແມ່ນເພີ່ມຂື້ນ ໜຶ່ງ ແລະຫຼັງຈາກນັ້ນໄດ້ຖືກມອບ ໝາຍ ໃຫ້ b (o / p: a = 11, b = 11)


ຕອບ 4:

++ a ແລະ a +1 ແມ່ນຄ້າຍຄືກັນ, ແຕ່ບັນຫາເກີດຂື້ນເມື່ອທ່ານໃຊ້ຕົວແປຫຼາຍກ່ວາ ໜຶ່ງ ຕົວແປ.

ຕົວຢ່າງ:

int a = 10, b;

++ a => ເພີ່ມມູນຄ່າເພີ່ມຕໍ່ ໜຶ່ງ (o / p: a = 11)

a ++ => ເພີ່ມມູນຄ່າເພີ່ມຂື້ນ ໜຶ່ງ (o / p: a = 11))

b = a ++ => ທຳ ອິດໃຫ້ຄ່າຄ່າ a ແລະຫຼັງຈາກນັ້ນເພິ່ມຂື້ນ 0ne (o / p: a = 11, b = 10)

b = ++ a => ຄ່າ ທຳ ອິດ a ແມ່ນເພີ່ມຂື້ນ ໜຶ່ງ ແລະຫຼັງຈາກນັ້ນໄດ້ຖືກມອບ ໝາຍ ໃຫ້ b (o / p: a = 11, b = 11)


ຕອບ 5:

++ a ແລະ a +1 ແມ່ນຄ້າຍຄືກັນ, ແຕ່ບັນຫາເກີດຂື້ນເມື່ອທ່ານໃຊ້ຕົວແປຫຼາຍກ່ວາ ໜຶ່ງ ຕົວແປ.

ຕົວຢ່າງ:

int a = 10, b;

++ a => ເພີ່ມມູນຄ່າເພີ່ມຕໍ່ ໜຶ່ງ (o / p: a = 11)

a ++ => ເພີ່ມມູນຄ່າເພີ່ມຂື້ນ ໜຶ່ງ (o / p: a = 11))

b = a ++ => ທຳ ອິດໃຫ້ຄ່າຄ່າ a ແລະຫຼັງຈາກນັ້ນເພິ່ມຂື້ນ 0ne (o / p: a = 11, b = 10)

b = ++ a => ຄ່າ ທຳ ອິດ a ແມ່ນເພີ່ມຂື້ນ ໜຶ່ງ ແລະຫຼັງຈາກນັ້ນໄດ້ຖືກມອບ ໝາຍ ໃຫ້ b (o / p: a = 11, b = 11)