İşaretçi Olarak Dizi İsimleri
Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 7 / 63.
C dilindeki diziler ve işaretçiler, C’nin bellekteki verilerle nasıl çalıştığını anlamanın temelini oluşturan özel bir ilişkiye sahiptir. Bir dizi tanımladığınızda, dizinin adı, dizinin ilk öğesine işaret eden bir sabit işaretçi olarak davranır.
Bu, int numbers[5]; gibi bir diziniz olduğunda, numbers adının aslında her zaman numbers[0] konumunu gösteren bir işaretçi olduğu anlamına gelir. Dizi adını, ayrıca bildirmeniz gerekmeyen yerleşik bir işaretçi olarak düşünebilirsiniz.
int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' points to the first element
// numbers == &numbers[0] // Bunlar eşdeğerdir!Bu eşdeğerlik çok önemlidir: numbers ve &numbers[0] size tamamen aynı bellek adresini verir. Dizi adı, adres operatörünü kullanmak zorunda kalmadan ilk öğenin adresine başvurmanın yalnızca daha kullanışlı bir yoludur.
Bu ilişkiyi anlamak, dizilerle işaretçi tekniklerini kullanmanın kapısını açar; bu da kodunuzu daha esnek ve verimli hâle getirebilir. Temel fark, normal işaretçilerin aksine dizi adlarının sabit işaretçiler olmasıdır; işaret ettikleri şeyi değiştiremezsiniz.
Görev
KolayDizi adları ile ilk elemanlarına işaretçilerin eşdeğerliğini gösteren bir C programı yazın. Programınız şunları yapmalıdır:
numbersadlı, 4 elemanlı bir tamsayı dizisi tanımlayın ve bu diziyi {10, 20, 30, 40} değerleriyle başlatınptradlı bir tamsayı işaretçisi tanımlayınnumbersdizi adınıptrişaretçisine atayınnumbersbiçim belirtecine sahipprintfkullanarak%piçinde saklanan adresi yazdırın&numbers[0]biçim belirtecine sahipprintfkullanarak ilk elemanın adresini%pyazdırınptrbiçim belirtecine sahipprintfkullanarak%piçinde saklanan adresi yazdırın- Dizi adını kullanarak ilk elemanın değerini yazdırın:
*numbers - İşaretçiyi kullanarak ilk elemanın değerini yazdırın:
*ptr
Çıktınız aşağıdaki biçimde sonuçları göstermelidir:
Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10Bu alıştırma, dizi adının ilk elemana sabit bir işaretçi gibi davrandığını ve numbers dizi adına atandığında &numbers[0], ptr ve ptr ifadelerinin tümünün aynı bellek adresini içerdiğini gösterir.
Kendin dene
#include <stdio.h>
int main() {
// TODO: Kodunuzu buraya yazın
// 1. 'numbers' dizisini {10, 20, 30, 40} ile bildir ve başlat
// 2. 'ptr' adında bir tamsayı işaretçisi bildir
// 3. Dizi adını işaretçiye ata
// 4. Gerekli tüm adresleri ve değerleri yazdır
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış 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ıKendi başına pratik yap: Online C derleyicisi