Aritmetika pointer
Termasuk bagian Logika dan Alur dalam perjalanan C di Coddy. Pelajaran 9 dari 63.
Kamu telah mempelajari cara mengakses elemen array menggunakan notasi pointer seperti *(array + i). Sekarang kamu akan mempelajari teknik yang lebih canggih: aritmetika pointer, yang memungkinkanmu memindahkan pointer di dalam memori menggunakan operasi penambahan dan pengurangan sederhana.
Saat kamu menaikkan pointer dengan ++ atau menurunkannya dengan --, pointer tidak hanya berpindah satu byte. Sebaliknya, pointer berpindah sejauh ukuran tipe data yang ditunjuknya. Untuk pointer integer, ptr++ bergerak maju sebanyak sizeof(int) byte, tepat menuju integer berikutnya di memori.
int numbers[5] = {10, 20, 30, 40, 50};
int *ptr = numbers; // Menunjuk ke elemen pertama (10)
ptr++; // Sekarang menunjuk ke elemen kedua (20)
ptr++; // Sekarang menunjuk ke elemen ketiga (30)Perhitungan ukuran otomatis ini membuat aritmetika pointer sangat kuat dan praktis. Kamu tidak perlu mengkhawatirkan perhitungan byte, C menangani pengalamatan memori untukmu berdasarkan tipe data pointer.
Aritmetika pointer sangat berguna untuk menelusuri array dalam perulangan. Alih-alih menggunakan indeks array, kamu dapat menambah nilai pointer untuk melewati setiap elemen secara berurutan, sehingga sering kali menghasilkan kode yang lebih efisien.
Tantangan
MudahTulis program C yang menunjukkan aritmetika pointer dengan menggunakan operasi peningkatan pointer untuk menelusuri dan memproses array. Programmu harus:
- Mendeklarasikan array integer bernama
datadengan 5 elemen dan menginisialisasinya dengan nilai {12, 24, 36, 48, 60} - Mendeklarasikan pointer ke integer bernama
ptrdan menginisialisasinya agar menunjuk ke elemen pertama array - Menggunakan for loop yang berjalan 5 kali untuk menelusuri seluruh array hanya dengan aritmetika pointer
- Di dalam perulangan:
- Mencetak nilai saat ini yang ditunjuk oleh
ptrmenggunakan operator dereferensi - Mencetak alamat memori yang tersimpan di
ptrmenggunakan penentu format%p - Meningkatkan pointer menggunakan
ptr++untuk berpindah ke elemen berikutnya
- Mencetak nilai saat ini yang ditunjuk oleh
- Setelah perulangan, mengatur ulang
ptragar kembali menunjuk ke elemen pertama array - Menggunakan aritmetika pointer untuk mengakses dan mencetak elemen ketiga (indeks 2) secara langsung menggunakan
*(ptr + 2) - Menggunakan aritmetika pointer untuk mengakses dan mencetak elemen terakhir (indeks 4) secara langsung menggunakan
*(ptr + 4)
Outputmu harus menampilkan hasil dalam format berikut:
Value: 12, Address: [address]
Value: 24, Address: [address]
Value: 36, Address: [address]
Value: 48, Address: [address]
Value: 60, Address: [address]
Third element: 36
Last element: 60Tantangan ini menguji pemahamanmu tentang bagaimana operasi peningkatan pointer secara otomatis berpindah sejauh ukuran tipe data, dan bagaimana kamu dapat menggunakan aritmetika pointer untuk mengakses elemen array pada offset tertentu dari posisi pointer dasar.
Coba sendiri
#include <stdio.h>
int main() {
// TODO: Tulis kodemu di sini
// Deklarasikan dan inisialisasi array 'data' dengan nilai {12, 24, 36, 48, 60}
// Deklarasikan pointer 'ptr' dan inisialisasi agar menunjuk ke elemen pertama
// Gunakan for loop dengan aritmetika pointer untuk menelusuri array
// Cetak setiap nilai dan alamatnya, lalu naikkan pointer
// Atur ulang pointer dan gunakan aritmetika pointer untuk mengakses elemen tertentu
return 0;
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Dasar-Dasar Pointer
Apa Itu Pointer?Mendeklarasikan PointerOperator Address-Of (&)Operator Dereference (*)Pointer NULLRekap: Dasar-Dasar Pointer4Proyek: Utilitas Teks Sederhana
Gambaran Umum ProyekMenghitung Karakter2Pointer dan array
Nama array sebagai pointerElemen array dan pointerAritmetika pointerMembandingkan pointerRangkuman: Menelusuri array dengan pointer5Pointer dan Fungsi
Penerusan dengan NilaiMeneruskan Pointer ke FungsiMengubah Variabel melalui PointerContoh Klasik: SwapMeneruskan Array ke FungsiRingkasan: Argumen Pointer Fungsi8Struct dan Pointer
Pointer ke StructOperator Panah (->)Mengirim Struct berdasarkan NilaiMengirim Pointer StructAlokasi Dinamis StructUlasan: Memodifikasi Struct dengan Pointer11Tantangan Rangkuman Akhir
Rangkuman: Penggabungan string DinamisRangkuman: array berisi structRangkuman: Penghitung Frekuensi Kata3Array char dan String
String sebagai array charPenanda akhir nullInput String dengan scanfMenggunakan strlen()Menggunakan strcpy()Menggunakan strcat()Menggunakan strcmp()Ulasan: Fungsi String DasarLatihan sendiri: Compiler C online