Pelajaran modul (2/2)
Petunjuk
Pointer adalah salah satu fitur paling kuat dan khas dari C++. Mereka memungkinkan Anda mengakses memori fisik komputer secara langsung, memungkinkan pengelolaan sumber daya yang efisien dan kinerja tinggi.
1. Apa itu Memori dan Alamat?
Setiap variabel yang Anda deklarasikan dalam program Anda disimpan dalam sel memori RAM. Setiap sel memiliki alamat memori unik (biasanya dinyatakan dalam format heksadesimal, misalnya, 0x7ffee3bf87ac).
C++ memungkinkan kita mendapatkan alamat memori variabel apa pun menggunakan operator alamat &:
int x = 42;
std::cout << &x; // Prints the memory address of x (e.g., 0x7ffee3bf87ac)2. Pengertian Pointer
Pointer adalah variabel khusus yang menyimpan alamat memori variabel lain sebagai nilainya.
Sintaksnya memerlukan penggunaan tanda bintang * setelah tipe data:
int x = 42;
int* ptr = &x; // ptr is a pointer to an integer that contains the address of x3. Operator Dereferensi (*)
Untuk mengakses atau mengubah nilai yang disimpan pada alamat yang ditunjuk oleh penunjuk, kita menggunakan operator dereferensi (atau operator tipuan), yang juga diwakili oleh simbol *:
int x = 42;
int* ptr = &x;
std::cout << *ptr; // Prints 42 (the value ptr points to)
*ptr = 100; // Modifies the value of x through the pointer
std::cout << x; // Now prints 100!4. Petunjuk Null: nullptr
Sebuah pointer yang tidak menunjuk ke alamat yang valid harus diinisialisasi dengan kata kunci nullptr (diperkenalkan di C++11):
int* ptr = nullptr; // Safe null pointerCobalah sendiri
Pada main, terdapat nilai variabel integer yang diinisialisasi menjadi 42. Deklarasikan pointer ke integer ptr yang menunjuk ke alamat nilai. Gunakan dereferensi ptr untuk mengatur nilai nilai menjadi 100, dan terakhir cetak nilai menggunakan std::cout.
Tunjukkan petunjuk
Deklarasikan pointer dengan `int* ptr = &value;`, ubah nilainya dengan mendereferensi `*ptr = 100;`, dan cetak `std::cout << value;`.
Solusi tersedia setelah 3 upaya
Definisikan fungsi doubleValue yang menerima pointer ke bilangan bulat (int* ptr) dan mengalikan nilai yang ditunjuknya dengan 2 (jika pointer bukan nol). Secara utama, panggil doubleValue dengan meneruskan alamat variabel num dan mencetaknya.
Tunjukkan petunjuk
Fungsi tersebut harus menerima `int* ptr`. Di dalamnya, gunakan `*ptr = (_ptr) _ 2`. Di main panggil dengan `doubleValue(&num);`.
Solusi tersedia setelah 3 upaya
Mengingat kode yang diberikan, ekspresi manakah yang memungkinkan Anda mengubah nilai a secara langsung, menyetelnya ke 10?
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?