İşaretçi Olarak Dizi İsimleri
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 7 / 63.
C'deki diziler ve işaretçiler, C'nin bellekteki verilerle nasıl çalıştığını anlamak için temel olan özel bir ilişkiye sahiptir. Bir dizi bildirdiğinizde, dizi adının kendisi dizinin ilk elemanına sabit bir işaretçi olarak işlev görür.
Bu, int numbers[5]; gibi bir diziniz olduğunda, numbers adının aslında her zaman numbers[0] öğesini işaret eden bir işaretçi olduğu anlamına gelir. Dizi adını, ayrıca bildirmenize gerek olmayan yerleşik bir işaretçi olarak düşünebilirsiniz.
int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' ilk öğeyi işaret eder
// numbers == &numbers[0] // Bunlar eşdeğerdir!Bu eşdeğerlik çok önemlidir: numbers ve &numbers[0] her ikisi de size tamamen aynı bellek adresini verir. Dizi adı, adres operatörünü kullanmak zorunda kalmadan ilk elemanın adresine atıfta bulunmanın sadece daha kullanışlı bir yoludur.
Bu ilişkiyi anlamak, kodunuzu daha esnek ve verimli hale getirebilecek olan dizilerle işaretçi tekniklerini kullanmanın kapısını açar. 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 eden pointer'lar 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 tam sayı dizisi bildirin ve bunu {10, 20, 30, 40} değerleriyle başlatın ptradında bir tam sayı pointer'ı bildirinnumbersdizi adınıptrpointer'ına atayınnumbersiçinde saklanan adresi,%pformat belirleyicisi ileprintfkullanarak yazdırın- İlk elemanın adresini
&numbers[0],%pformat belirleyicisi ileprintfkullanarak yazdırın ptriçinde saklanan adresi,%pformat belirleyicisi ileprintfkullanarak yazdırın- Dizi adını kullanarak ilk elemanın değerini yazdırın:
*numbers - Pointer'ı 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 pointer gibi davrandığını ve ptr'ye dizi adı atandığında numbers, &numbers[0] ve ptr ifadelerinin hepsinin aynı bellek adresini içerdiğini gösterir.
Kopya kağıdı
C'deki dizi adları, dizinin ilk elemanına yönelik sabit işaretçiler (constant pointers) olarak işlev görür.
Bir dizi tanımladığınızda, dizi adı ilk elemanı işaret eder:
int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' ilk elemanı işaret eder
// numbers == &numbers[0] // Bunlar eşdeğerdir!Bir dizi adını bir işaretçiye atayabilirsiniz:
int *ptr;
ptr = numbers; // ptr artık ilk elemanı işaret ediyorİşaretçi notasyonunu kullanarak değerlere erişin:
*numbers // Dizi adı aracılığıyla ilk elemanın değeri
*ptr // İşaretçi aracılığıyla ilk elemanın değeriTemel fark: Dizi adları sabit işaretçilerdir; normal işaretçilerin aksine, işaret ettikleri şeyi değiştiremezsiniz.
Kendin dene
#include <stdio.h>
int main() {
// YAPILACAK: Kodunuzu buraya yazın
// 1. 'numbers' dizisini {10, 20, 30, 40} ile tanımlayın ve başlatın
// 2. 'ptr' adında bir tam sayı (integer) işaretçisi tanımlayın
// 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ı