Apakah incrementing / decrementing atau menambahkan nilai integer ke pointer yang tidak menunjuk ke elemen dalam urutan Undefined Behavior?
Saya tahu bahwa pointer (ke elemen array) dan iterator dapat ditambah / dikurangi untuk menjalankan urutan elemen dan dapat melompat mundur-dan-untuk elemen dalam urutan.
Tetapi apa yang akan terjadi jika saya menambahkan pointer ke satu objek atau menambahkannya dengan nilai integer? apakah ini perilaku yang tidak terdefinisi atau tidak masalah tetapi kita tidak dapat mengakses memori itu?
int x = 551;
int* p = &x;
++p;
--p;
std::cout << *p << '\n';
Karena saya sudah membaca bahwa kita tidak boleh menaikkan / menurunkan pointer yang tidak menunjuk ke elemen dalam urutan atau array misalnya.
Jadi dapatkah seseorang menjelaskan apa yang akan terjadi dan apakah contoh saya OK (penunjuk de-referensi p)? Terima kasih!
Jawaban
ketika aritmatika penunjuk diterapkan ke penunjuk yang menunjuk ke suatu objek, penunjuk dianggap menunjuk ke larik dari tipe objek itu dengan hanya satu elemen, seperti yang dikatakan dalam standar .
Objek yang bukan elemen array dianggap milik array elemen tunggal untuk tujuan ini
Dalam contoh Anda, penunjuk p
seolah-olah menunjuk ke int arr[1] = {551}
Jadi, operasi terkait serupa untuk diterapkan ke penunjuk yang mengarah ke arr
. Artinya, ++p
akan p
menunjuk ke elemen arr [1] (hipotetis), dan --p
akan p
menunjuk ke elemen pertama arr [0] lagi. Jadi, pada poin terakhir, penunjuk de-referensi p
OK dan tidak menghasilkan UB.