Edisi pembelajaran bahasa Indonesia. Kode dan keluarannya tetap seperti aslinya.
Pointer dalam C
Pelajari alamat, dereferensi pointer, serta batas dan masa hidup objek.

Pointer menyimpan alamat dan memiliki tipe terkait. Operator & memperoleh alamat objek, sedangkan * mengakses objek yang ditunjuk. Sebelum dereferensi, pastikan objek masih hidup dan bertipe sesuai.
Aritmetika pointer bergerak dalam satuan ukuran tipe yang ditunjuk. Pointer boleh dibentuk hingga satu posisi setelah akhir array, tetapi posisi tersebut tidak boleh didereferensi. Pengurangan dan perbandingan urutan pointer harus mengikuti aturan untuk satu array.
Meneruskan pointer menyalin nilainya. Salinan tersebut dapat mengubah objek asli, tetapi mengganti salinannya tidak mengubah pointer pemanggil. Untuk memperbaruinya, kembalikan pointer baru atau gunakan pointer ke pointer.
Inisialisasi pointer, periksa alokasi, dan jangan mengakses memori setelah free. Gambar objek dan panah antarobjek membantu memahami linked list dan array pointer.
Kode C
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(void) {
int score = 95;
int *ptr = &score;
printf("Value via ptr : %d\n", *ptr);
*ptr = 100;
printf("Updated score : %d\n", score);
int nums[4] = {10, 20, 30, 40};
int *p = nums;
for (int i = 0; i < 4; i++) {
printf("*(p + %d) = %d\n", i, *(p + i));
}
printf("Bytes between p and p + 1: %zu\n",
(size_t)((char *)(p + 1) - (char *)p));
int x = 1, y = 2;
swap(&x, &y);
printf("After swap: x = %d, y = %d\n", x, y);
int *heap = malloc(3 * sizeof(int));
if (heap == NULL) {
return 1;
}
for (int i = 0; i < 3; i++) {
heap[i] = (i + 1) * 5;
}
printf("Heap values: %d %d %d\n", heap[0], heap[1], heap[2]);
free(heap);
heap = NULL;
printf("heap is %s after free\n", heap == NULL ? "NULL" : "not NULL");
return 0;
}
Buka di kompilerKeluaran yang diharapkan
Value via ptr : 95 Updated score : 100 *(p + 0) = 10 *(p + 1) = 20 *(p + 2) = 30 *(p + 3) = 40 Bytes between p and p + 1: 4 After swap: x = 2, y = 1 Heap values: 5 10 15 heap is NULL after free
Pertanyaan umum
Mengapa kode dan keluarannya tetap dalam bahasa Inggris?
Kata kunci, pengenal, dan teks yang diperiksa tes dipertahankan agar program tidak berubah. Penjelasan dan kontrol telah diterjemahkan.