Minggu, Mei 03, 2020

Perbedaan antara ++*p, *p++, dan *++p

Perkirakan hasil output dari contoh program berikut.

PROGRAM 1 

PROGRAM 2 

PROGRAM 3 

Hasil dari keluaran program sebelumnya akan mudah diprediksi dengan mengingat beberapa penerapan aturan mengenai operator postfix ++ dan prefix ++.

satu, Precedence dari prefix ++ dan * adalah sama. Asosiatifitas dari keduanya adalah dari kanan ke kiri (right to left).
dua, Precedence dari postfix ++ adalah lebih besar dari * dan prefix ++. Tingkat asosiatifitas dari postfix ++ adalah dari kiri ke kanan (left to right).

Bentuk ekspresi ++*p memiliki dua operator yang memiliki precedence sama, sehingga kompilator selanjutnya akan melihat tingkat asosiatifitasnya. Asosiatifitas dari operator adalah kanan ke kiri. Sehingga bentuk ekspresinya yang dibaca adalah ++(*p), jadi ouput dari program pertama adalah "arr[0]=11, arr[1]=20, *p=11".

Ekspresi *p++ dibaca *(p++) sehingga precedence dari postfix ++ yang lebih tinggi dari *. Maka output dari program kedua adalah "arr[0]=10, arr[1]=20, *p=20".

Ekspresi *++p memiliki dua operator dengan precedence yang sama, sehingga kompilator akan melihat tingkat asosiatifitasnya. Asosiatifitas dari operator tersebut adalah dari kanan ke kiri. Jadi, ekspresi dari operator akan dibaca *(++p). Output dari program ketiga adalah "arr[0]=10, arr[1]=20, *p=20".





Related Posts

Perbedaan antara ++*p, *p++, dan *++p
Oleh

"semoga yang memberikan komentar diberikan berkah kebaikan dari Allah, dijauhkan dari kejahatan, dan diberikan pahala ilmu dan amal jariyah dari sepenggal kata yang ia tinggalkan amiin :) "