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ırBu 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.
Görev
KolayGeleneksel 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:
- 6 öğeli
valuesadında bir tam sayı dizisi tanımlayın ve bunu {5, 15, 25, 35, 45, 55} değerleriyle başlatın - Dizinin tüm öğeleri üzerinde gezinmek için bir for döngüsü kullanın
- 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) - İşaretçi gösterimi erişim yöntemini kullanarak her bir öğeyi yazdırın
- 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]
- Önce işaretçi gösterimini kullanarak:
Çı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: 25Bu 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;
}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
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String Fonksiyonları