İşaretçi dizisi
- C kursu
- Orta seviye
- Ders 2/116
- 5 dk
İşaretçi dizisi oluşturmayı ve kullanmayı öğrenirsin.
İşaretçi dizisi
Bir işaretçi dizisi (array of pointers), her elemanı işaretçi olan bir dizidir. C'de int *arr[3]; yazımı, üç int * elemanlı bir dizi bildirir.
Örnek: int a = 1, b = 2, c = 3; int *arr[3] = {&a, &b, &c};. Burada arr[0] &a'ya, arr[1] &b'ye eşittir. *arr[1] size b'nin değerini verir. İşaretçi dizileri, özellikle dize listelerinde (argv gibi) çok yaygındır.
Dize listeleri için işaretçi dizisi
İşaretçi dizisinin en yaygın kullanımı dize listeleridir. C'de bir dize, char * türünde bir işaretçidir; dolayısıyla dize listesi char * dizisi olarak tutulur.
Örnek: char *names[3] = {"Ayşe", "Mehmet", "Zeynep"};. Burada her dize sabit, salt okunur bellekte durur; dizi yalnızca bu dizelere işaretçiler tutar. names[0] ilk dizeyi, names[1][0] ise ikinci dizenin ilk harfini verir. Bu yapı, komut satırı argümanlarından menü sistemlerine kadar geniş bir alanda kullanılır.
Uygulama İsim listesini yazdır
Üç isim içeren bir char *names[3] işaretçi dizisi tanımla (ör. "Ayşe", "Mehmet", "Zeynep"). Bir for döngüsü ile her ismi printf ile ayrı satıra yazdır.
Başlangıç kodu
#include <stdio.h>
// İsim dizisi tanımla
// for döngüsüyle her ismi yazdır
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
int main(void) {
char *names[3] = {"Ayşe", "Mehmet", "Zeynep"};
for (int i = 0; i < 3; i++) {
printf("%s\n", names[i]);
}
return 0;
}Beklenen çıktı
Ayşe Mehmet Zeynep
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 İşaretçi dizisi parçalarını eşle
| Kavram | Anlamı |
|---|---|
int *arr[3] |
Dizi bildirimi |
arr[0] |
İlk işaretçi |
*arr[1] |
İşaret edilen değer |
arr[i] = &x |
Atama |
2 Üç dize tutan dizi nasıl bildirilir?
- char **names[3];
- char names[3];
- char *names[3]; Doğru cevap
- char *(names);
Açıklama: Char *names[3]; — üç char işaretçisi tutar.
3 Dizinin ikinci dizesini yazdır
char *names[3] = {"Ayşe", "Mehmet", "Zeynep"};
printf("%s\n", names[____]);
char *names[3] = {"Ayşe", "Mehmet", "Zeynep"};
printf("%s\n", names[1]);
Açıklama: names[1] ikinci dize olan "Mehmet"e işaret eder.