Menu
Coddy logo textTech

Dizi Elemanları - İşaretçiler

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 8 / 63.

Dizi adlarının işaretçi olarak nasıl çalıştığını anladığınıza göre, bu bilgiyi dizi öğelerine tamamen farklı bir şekilde erişmek için kullanabilirsiniz. array[i] gibi tanıdık köşeli ayraç notasyonunu kullanmak yerine, aynı sonucu elde etmek için işaretçi notasyonunu kullanabilirsiniz.

Temel içgörü, array[i] ifadesinin tam olarak *(array + i) ifadesine eşdeğer olmasıdır. array + i yazdığınızda, C'ye dizinin başlangıcından i konum ileri gitmesini söylersiniz. Dereferans operatörü * ise ardından o konumdaki değeri alır.

int numbers[5] = {10, 20, 30, 40, 50};
// Bu iki satır tam olarak aynı şeyi yapar:
printf("%d", numbers[2]);    // 30 yazdırır
printf("%d", *(numbers + 2)); // Ayrıca 30 yazdırır

Bu işaretçi gösterimi çalışır çünkü C, veri tipi boyutuna bağlı olarak doğru bellek adresini otomatik olarak hesaplar. Bir tamsayı dizi işaretçisine 2 eklediğinizde, C 2 × sizeof(int) bayt kadar ileri gider ve tam olarak üçüncü elemana ulaşır.

Bu denkliği anlamak, dizilerle çalışma şeklinizde size esneklik sağlar ve C öğrenmeye devam ettikçe karşılaşacağınız daha gelişmiş işaretçi tekniklerine sizi hazırlar.

challenge icon

Görev

Kolay

Geleneksel dizi indeksleme yerine işaretçi gösterimini kullanarak dizi öğelerine erişimi gösteren bir C programı yazın. Programınız şunları yapmalıdır:

  1. 6 öğeli values adında bir tam sayı dizisi tanımlayın ve bunu {5, 15, 25, 35, 45, 55} değerleriyle başlatın
  2. Dizinin tüm öğeleri üzerinde gezinmek için bir for döngüsü kullanın
  3. Döngü içinde, her bir öğeye erişmek için işaretçi gösterimini *(values + i) kullanın (values[i] gibi köşeli parantez gösterimini kullanmayın)
  4. İşaretçi gösterimi erişim yöntemini kullanarak her bir öğeyi yazdırın
  5. Döngüden sonra, her iki yöntemi de kullanarak üçüncü öğeyi (indeks 2) yazdırarak eşdeğerliği gösterin:
    • Önce işaretçi gösterimini kullanarak: *(values + 2)
    • Ardından geleneksel dizi gösterimini kullanarak: values[2]

Çıktınız sonuçları aşağıdaki formatta görüntülemelidir:

Element 0: 5
Element 1: 15
Element 2: 25
Element 3: 35
Element 4: 45
Element 5: 55
Third element via pointer: 25
Third element via array: 25

Bu meydan okuma, array[i] ile *(array + i) arasındaki eşdeğerlik anlayışınızı test eder ve işaretçi aritmetiğinin, geleneksel indeksleme yerine bellek adresi hesaplamalarını kullanarak dizi öğelerine erişmenize nasıl olanak tanıdığını gösterir.

Kendin dene

#include <stdio.h>

int main() {
    // TODO: Kodunuzu buraya yazın
    // 6 elemanlı 'values' dizisini tanımlayın ve başlatın
    // Her bir elemanı işaretçi notasyonu *(values + i) kullanarak yazdırmak için bir for döngüsü kullanın
    // Döngüden sonra, üçüncü elemanı hem işaretçi hem de dizi notasyonu kullanarak yazdırın
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Logic & Flow bölümündeki tüm dersler