İş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
#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
#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ş
int arr[5] = {1,2,3,4,5};
int *p = arr;
printf("%d", *(p + ____)); /* 3 yazar */
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.