Saya membaca "pemrograman King KN's C" dan menemukan pernyataan berikut:
Kami membahas menggunakan ekspresi
sizeof(a)/sizeof(a[0])
untuk menghitung jumlah elemen dalam array. Ungkapansizeof(a)/sizeof(t)
, di mana t adalah jenis elemen a, juga akan berfungsi, tetapi dianggap sebagai teknik yang lebih rendah.
Mengapa itu dianggap teknik yang lebih rendah?
Jawaban:
sizeof(a)/sizeof(t)
secara eksplisit kode tipe ke dalam ekspresi. Anda sekarang memiliki jenis yang ditentukan di beberapa lokasi, tanpa dukungan penyusun untuk memastikan bahwa Anda menggunakan jenis yang sama. Jadi, jika Anda mengubah tipe dasar array, tetapi tidak dalam ekspresi jumlah (sepenuhnya terpisah), bingo: kode Anda akan mengkompilasi dengan baik, tetapi jumlah elemen Anda akan salah. Jika Anda beruntung program Anda akan macet, tetapi jika tidak, ia akan berfungsi hampir sepenuhnya dengan benar, tetapi sesekali akan berperilaku sangat aneh.sizeof(a)/sizeof(a[0])
dijamin benar, hanya membutuhkan nama array. Ubah jenisnya dan Anda baik-baik saja; ganti nama array dan kompiler akan mengeluh. Tidak perlu berpikir: kami menyukai pemrograman seperti itu.sumber
sizeof a/sizeof*a
, meskipun itu tidak benar-benar perbedaan yang substansial.