İşaretçi Olarak Dizi İsimleri
Coddy'nin C Journey'sinin Logic & Flow 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 bildirdiğinizde, dizinin adı kendiliğinden dizinin ilk elemanına işaret eden sabit bir pointer gibi davranır.
Bu, int numbers[5]; gibi bir array kullandığınızda, numbers adının temelinde her zaman numbers[0] öğesine points eden bir pointer olduğu anlamına gelir. array adını, ayrıca declare etmeniz gerekmeyen yerleşik bir pointer 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] ifadelerinin her ikisi de size tam olarak aynı bellek adresini verir. Dizi adı, adres alma operatörünü kullanmak zorunda kalmadan ilk elemanın adresine başvurmanın yalnızca daha uygun bir yoludur.
Bu ilişkiyi anlamak, dizilerle işaretçi tekniklerini kullanmanın kapısını açar ve kodunuzu daha esnek ve verimli hale getirebilir. Temel fark, normal işaretçilerin aksine, dizi isimlerinin sabit işaretçiler olmasıdır - neyi gösterdiklerini değiştiremezsiniz.
Görev
KolayDizi adları ile dizinin ilk elemanına işaret eden işaretçiler (pointers) arasındaki eşdeğerliği gösteren bir C programı yazın. Programınız şunları yapmalıdır:
- 4 elemanlı
numbersadında bir tamsayı (integer) dizisi bildirin ve bunu {10, 20, 30, 40} değerleriyle ilklendirin (initialize) - Bir tamsayıya işaret eden
ptradında bir işaretçi bildirin numbersdizi adınıptrişaretçisine atayınnumbersiçinde saklanan adresi,%pbiçim belirteci ileprintfkullanarak yazdırın- İlk elemanın adresini
&numbers[0],%pbiçim belirteci ileprintfkullanarak yazdırın ptriçinde saklanan adresi,%pbiçim belirteci ileprintfkullanarak 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 sonuçları aşağıdaki formatta görüntülemelidir:
Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10Bu görev, dizi adının ilk elemana sabit bir işaretçi (constant pointer) gibi davrandığını ve ptr alanına dizi adı atandığında numbers, &numbers[0] ve ptr ifadelerinin hepsinin 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 bildirin ve başlatın
// 2. 'ptr' adında bir tamsayı işaretçisi bildirin
// 3. Dizi adını işaretçiye atayın
// 4. Gerekli tüm adresleri ve değerleri 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ı