İş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
#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
#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ş
int arr[3] = {10, 20, 30};
int *ptr = arr;
printf("%d\n", ____); /* 20 yazar */
int arr[3] = {10, 20, 30};
int *ptr = arr;
printf("%d\n", *(ptr + 1)); /* 20 yazar */
Açıklama: *(ptr + 1) ikinci elemana erişir.