CodeBlanks Logo Icon CodeBlanks

İşaretçi aritmetiği

  • C kursu
  • Başlangıç
  • Ders 75/116
  • 5 dk

İşaretçi üzerinde + ve - ile aritmetik yapmayı öğrenirsin.

İşaretçi aritmetiği

İşaretçilere toplama veya çıkarma yapabilirsin. ptr + 1, işaretçinin türünün boyutu kadar ileri gider.

int arr[3] = {10, 20, 30};
int *ptr = arr;
printf("%d\n", *(ptr + 1));  /* 20 yazar */

Bir int 4 byte ise, ptr + 1 bir sonraki int'e atlar; adres 4 artar. Bu, dizilerle işaretçi kullanımının temelidir.

İşaretçi ile dizi gezme

İşaretçi aritmetiği, bir diziyi indis kullanmadan gezmeyi sağlar. ptr++ her adımda bir sonraki elemana geçer.

int arr[3] = {10, 20, 30};
int *ptr = arr;
for (int i = 0; i < 3; i++) {
    printf("%d\n", *ptr);
    ptr++;
}

Bu yöntem, indis hesabından kurtarır; ancak işaretçinin dizi sınırlarını aşmamasına dikkat etmek gerekir.

Uygulama İşaretçi aritmetiği ile dizi yazdır

int arr[3] = {10, 20, 30}; tanımla. int *ptr = arr; ile başla. Bir for döngüsünde *(ptr + i) ile her elemanı yazdır (i = 0, 1, 2). Çıktı üç satır olmalı: 10, 20, 30.

Başlangıç kodu

main.c
#include <stdio.h>

int main(void) {
    int arr[3] = {10, 20, 30};
    /* ptr'yi arr'ya bağla */
    /* for döngüsünde işaretçi aritmetiğiyle yazdır */
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

int main(void) {
    int arr[3] = {10, 20, 30};
    int *ptr = arr;
    for (int i = 0; i < 3; i++) {
        printf("%d\n", *(ptr + i));
    }
    return 0;
}

Beklenen çıktı

10
20
30

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 int *ptr için ptr + 1 kaç byte ilerler? (int 4 byte)

  • 1 byte
  • 0 byte
  • 8 byte
  • 4 byte Doğru cevap

Açıklama: int 4 byte ise, ptr + 1 bir sonraki int'e atlar; 4 byte ileri.

2 İşaretçi aritmetiğini eşleştir

Kavram Anlamı
ptr + 1 bir sonraki eleman
ptr - 1 bir önceki eleman
ptr++ bir ileri git
*(ptr + n) n. eleman

3 İkinci elemana eriş

Soru
int arr[3] = {10, 20, 30};
int *ptr = arr;
printf("%d\n", ____);  /* 20 yazar */
Cevap
int arr[3] = {10, 20, 30};
int *ptr = arr;
printf("%d\n", *(ptr + 1));  /* 20 yazar */

Açıklama: *(ptr + 1) ikinci elemana erişir.

Başlangıç bölümündeki tüm dersler