Saya seorang programmer pemula dan saya berbaur dengan petunjuk untuk mendapatkan dasar saya kuat untuk DSA. Berikut ini adalah kode saya

int main() {

    int AnArray[20];
    int* plocation6, * plocation0;
    plocation6 = &AnArray[6];
    plocation0 = &AnArray[0];
    cout << (int)plocation6 << endl << (int)plocation0<<endl;
    cout << "Difference   " << plocation6 - plocation0;
    

}

Dan saya berharap nilai Selisihnya adalah 24 seperti dalam Heksadesimal lokasi penunjuk berbeda 18 dan 24 dalam desimal tetapi jawabannya menjadi 6 di mana seolah-olah saya menggunakan mengonversinya menggunakan (int) dan kemudian melakukan operasi kemudian saya mendapatkan 24 sebagai jawaban, Mengapa demikian? tolong jelaskan mengapa 6 datang??

1
Ali M 22 Desember 2020, 19:33

3 jawaban

Jawaban Terbaik

Untuk membangun di atas jawaban sebelumnya:

Memang benar, karena int membutuhkan 4 byte, maka kedua pointer terpisah 24 byte.

Alasan Anda mendapatkan 6 adalah karena operator - (untuk pointer) didefinisikan sebagai perbedaan antara dua alamat pointer dibagi dengan ukuran tipe data yang ditunjuk pointer.

Ini adalah konsep yang mirip dengan kelebihan beban operator, di mana operator didefinisikan untuk melakukan sesuatu selain operasi biasa.
Catatan: Saya tidak berpikir ini secara teknis kelebihan beban operator, tetapi memahami kelebihan beban operator akan membantu untuk memahami konsep ini.

1
Awbmilne 22 Desember 2020, 22:08

Perbedaan antara dua pointer tidak dalam byte, itu dalam jumlah elemen. Jadi, Anda melihat jumlah byte (24) dibagi dengan sizeof(int) (4).

4
Mark Ransom 22 Desember 2020, 16:39

tolong jelaskan mengapa 6 datang??

Unsur pada indeks 0 dan unsur pada indeks 6 terpisah 6 indeks. Dari situlah 6 berasal ketika Anda mengurangi penunjuk satu dari yang lain.

1
eerorika 22 Desember 2020, 17:58