CodeBlanks Logo Icon CodeBlanks

İşaretçi ile dizi

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

İşaretçi aritmetiğiyle dizi elemanlarına erişmeyi öğrenirsin.

İşaretçi aritmetiği ile dizi

Bir işaretçiye tamsayı eklemek, bir sonraki elemana atlar. p + 1 işaretçinin türünün boyutu kadar ileri gider; int için 4 byte.

int arr[3] = {10, 20, 30};
int *p = arr;
printf("%d", *(p + 2));  /* 30 */
printf("%d", p[2]);       /* 30: aynı şey */

p[i] ile *(p + i) tamamen aynı anlama gelir. İndisli yazım daha okunaklı, işaretçi yazımı daha esnektir.

p[i] ve *(p+i) aynıdır

C'de p[i] yazımı aslında *(p + i)'nin kısaltmasıdır. İkisi tamamen eşdeğerdir; derleyici aynı makine kodunu üretir.

int arr[4] = {5, 10, 15, 20};
int *p = arr;
printf("%d", p[0]);      /* 5 */
printf("%d", *(p + 1));   /* 10 */
printf("%d", p[2]);      /* 15 */

Hangi yazımı seçeceğin stil meselesidir. İndisli yazım yeni başlayanlara daha kolay gelir.

Uygulama İki yazımı karışık kullan

int arr[4] = {5, 10, 15, 20}; tanımla. int *p = arr; ile başla. Dört printf ile sırayla p[0], *(p + 1), p[2] ve *(p + 3) sonuçlarını ayrı satırlarda yazdır. Çıktı 5, 10, 15, 20 olmalı.

Başlangıç kodu

main.c
#include <stdio.h>

int main(void) {
    int arr[4] = {5, 10, 15, 20};
    /* p'yi arr'ya bağla; p[0], *(p+1), p[2], *(p+3) yazdır */
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

int main(void) {
    int arr[4] = {5, 10, 15, 20};
    int *p = arr;
    printf("%d\n", p[0]);
    printf("%d\n", *(p + 1));
    printf("%d\n", p[2]);
    printf("%d\n", *(p + 3));
    return 0;
}

Beklenen çıktı

5
10
15
20

Soru ve cevaplar

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

1 Üçüncü elemana eriş

Soru
int arr[5] = {1,2,3,4,5};
int *p = arr;
printf("%d", *(p + ____));  /* 3 yazar */
Cevap
int arr[5] = {1,2,3,4,5};
int *p = arr;
printf("%d", *(p + 2));  /* 3 yazar */

Açıklama: *(p + 2) üçüncü elemanı (3) verir.

2 Erişim biçimlerini eşleştir

Kavram Anlamı
p[0] ilk eleman
p[1] ikinci eleman
*(p+2) üçüncü eleman
p+3 dördüncü adres

3 p = arr; p[2] ifadesi hangisine eşittir?

  • *(p + 1)
  • *(p + 3)
  • *(p + 2) Doğru cevap
  • *p

Açıklama: p[2] ile *(p + 2) tamamen aynıdır.

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