Dizi adı işaretçi
- C kursu
- Başlangıç
- Ders 77/116
- 5 dk
Dizi adının ilk elemana işaretçi olduğunu öğrenirsin.
Dizi adı işaretçidir
C'de dizi adı, dizinin ilk elemanının adresine dönüşür. Bu yüzden bir dizi adını bir işaretçiye doğrudan atayabilirsin.
int arr[3] = {10, 20, 30};
int *p = arr; /* p, arr[0]'ın adresini tutar */
printf("%d", *p); /* 10 yazar */Bu davranışa dizi çürümesi (array decay) denir: dizi bilgisi işaretçiye düşer. arr ve p artık aynı bellek bölgesini gösterir.
Dizi çürümesi fonksiyonlarda
Bir diziyi fonksiyona geçirince dizi adı işaretçiye dönüşür. Fonksiyon dizinin kopyasını değil, kendisini görür. Bu yüzden fonksiyon içinde dizinin elemanları değiştirilebilir.
void add_one(int *arr, int n) {
for (int i = 0; i < n; i++) arr[i]++;
}Dizi uzunluğu işaretçide saklanmaz; bu yüzden boyutu ayrı parametre olarak vermek gerekir.
Uygulama İşaretçi ile dizi elemanlarına eriş
int arr[3] = {10, 20, 30}; tanımla. int *p = arr; ile p'yi arr'ya bağla. Üç printf ile *p, *(p + 1) ve *(p + 2) sonuçlarını ayrı satırlarda yazdır. Çıktı 10, 20, 30 olmalı.
Başlangıç kodu
#include <stdio.h>
int main(void) {
int arr[3] = {10, 20, 30};
/* p'yi arr'ya bağla; *p, *(p+1), *(p+2) yazdır */
return 0;
}Örnek çözüm
#include <stdio.h>
int main(void) {
int arr[3] = {10, 20, 30};
int *p = arr;
printf("%d\n", *p);
printf("%d\n", *(p + 1));
printf("%d\n", *(p + 2));
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 arr[3] = {10,20,30}; printf("%d", *(arr+1)); ne yazar?
- 10
- 20 Doğru cevap
- 30
- 11
Açıklama: *(arr+1), arr[1] yani 20'dir.
2 Diziyi işaretçiye ata
int arr[3] = {10, 20, 30};
int *p = ____; /* p artık arr'yi işaret eder */
int arr[3] = {10, 20, 30};
int *p = arr; /* p artık arr'yi işaret eder */
Açıklama: dizi adını doğrudan işaretçiye atayabilirsin.
3 Dizi-işaretçi kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
arr |
ilk elemanın adresi |
arr+1 |
ikinci elemanın adresi |
*(arr+2) |
üçüncü elemanın değeri |
int *p = arr |
işaretçi ataması |