İşaretçiler birçok C programı için hayati öneme sahiptir ancak anlaşılması zor olabilir. Sözdizimlerini ve nasıl çalıştıklarını pratik örneklerle gözden geçirin.

İşaretçiler, dili etkili bir şekilde kullanmak için iyi bir anlayışa ihtiyaç duyacağınız, C programlamanın önemli bir yönüdür. Verimli bellek yönetimine, verileri referansa göre aktarmaya, dizileri ve dizeleri işlemeye ve daha fazlasına yardımcı olurlar. Ancak hataları önlemek için dikkatli kullanım gerektirirler.

Belleği ve adresleri anlamaktan işaretçi aritmetiğinde uzmanlaşmaya kadar C işaretçilerinin ayrıntılarını keşfedin.

Bellek ve Adresler

Bellek - genellikle kısa yol olarak kullanılır RAM (Rastgele Erişim Belleği)— bir programın çalışması için gereken verileri ve talimatları tutan bilgisayardaki depolama alanıdır. Programınızın çalışma alanı olarak hizmet eder. En küçük bellek birimi tipik olarak sekiz bit'e eşit olan bir bayttır.

Her bellek konumunun benzersiz bir adresi vardır ve bilgisayara bağlı olarak farklı miktarda veri depolayabilir. C'de bir değişken bildirdiğinizde, ona dolaylı olarak verilerini depolaması için bir bellek konumu atarsınız. Bunu, yerini bulmak için kullanabileceğiniz benzersiz bir adrese sahip bir ev gibi düşünün.

instagram viewer

Bilgisayarınızın belleğini, her biri bir bayt veri içeren bir dizi depolama hücresi olarak hayal edin. Diyelim ki iki değişken var, X Ve sen, bir C programında:

int x = 5;
int y = 10;

Bellekte şöyle görünebilir:

Adres

Veri

1000

5

1004

10

Burada, ayrı hafıza konumları bu değişkenleri saklar. Veriler X temsil eder, 1000 bellek adresinde bulunur, oysa senverileri hafıza adresi 1004'ü kaplar.

İşaretçilerle çalışırken belleği ve adresleri anlamak çok önemlidir çünkü bunlar bellek adreslerini saklayan değişkenlerdir. Belirli bir bellek konumunda saklanan verilere erişmenizi ve bunları değiştirmenizi sağlarlar.

C'de İşaretçileri Bildirmek ve Başlatmak

C'deki işaretçileri kullanarak verileri değiştirebilmeniz için önce onu bildirmeniz ve başlatmanız gerekir.

beyan

Bir işaretçiyi bildirmek için işaret ettiği veri türünü, ardından yıldız işaretini (*) ve ardından işaretçinin adını belirtirsiniz. Örneğin:

int *ptr;

Burada, int *ptr adında bir işaretçi bildirir ptr bir tamsayının hafıza adresini saklayabilir.

Başlatma

Bildirimden sonra, işaret edeceği hafıza adresiyle onu başlatmalısınız. Bunu şu şekilde başlatabilirsiniz:

int x = 5;
int *ptr = &x;

Bu beyanda, & operatörü x değişkeninin adresini getirir. Kod aslında "ptr bir değişkendir, bir tamsayı değerinin bellek konumunu saklar ve bu konum, x'in şu anda başvurduğu yerdir" der.

Şimdi, ptr tamsayı değişkeninin adresini tutar X. Örneğin:

Değişken

Adres

Değer

X

1000

5

ptr

1000

C'deki işaretçiler yalnızca bir değişkenin adresini saklamakla kalmaz, aynı zamanda bilgisayarın belleğinde kendi benzersiz adreslerine de sahiptir.

Referans Kaldırma İşaretçileri

Bir C işaretçisinin referansının kaldırılması, işaretçinin işaret ettiği bellek adresinde saklanan değere erişim anlamına gelir.

Diyelim ki bir işaretçiniz var, int *ptr, bu bir tamsayı değişkenine işaret eder ve bu değişkenin değeri 10'dur. Değere işaretçi aracılığıyla erişmek için yıldız işaretini (*) Şebeke:

int x = 10;

int *ptr = &x; // ptr points to the address of x

int value = *ptr; // Dereferencing ptr to get the value

Bu örnek şunları kullanır: ptr Değişkenin işaret ettiği bellek adresindeki değeri almak için kullanılır. Bu yüzden, değer artık içeriği olan 10 değerini tutuyor X.

İşaretçi Aritmetiği

İşaretçi aritmetiği, C'de güçlü bir özelliktir; özellikle diziler ve dizelerle (karakter dizileri) çalışmak için kullanışlıdır. Bellekte hareket etmek için işaretçiler üzerinde aritmetik işlemler yapmanızı sağlar.

İşte bunu nasıl kullanabileceğinizi gösteren bir örnek.

Bir tamsayı dizisi bildirerek başlayın:

int numbers[] = {10, 20, 30};

Bir int'ye bir işaretçi bildirin ve sayılar dizisinin bellek konumunu ona atayın:

int *ptr = numbers;

Sayılar zaten dolaylı olarak bir işaretçi türü olduğundan burada "&" operatörünü kullanmanıza gerek yoktur.

Ptr değişkeni artık dizideki ilk öğeye işaret ediyor:

printf("%d\n", *ptr); // 10

İşaretçiyi 2 artırarak dizinin üçüncü öğesine taşıyabilirsiniz:

ptr += 2;
printf("%d\n", *ptr); // 30

İşaretçiyi ondan çıkararak geriye doğru hareket ettirebilirsiniz:

ptr--;
printf("%d\n", *ptr); ;// 20

İşaretçi aritmetiği özellikle dizilerde gezinmek ve dinamik bellek ayırmayla çalışmak için kullanışlıdır.

C'de İşaretçiler ve İşlevler

Eğer sen C programlamada fonksiyonların nasıl çalıştığını anlamak, o zaman işlev işaretçilerini kullanma yolunda ilerleyeceksiniz. İşte bunları kullanmanın bazı yolları.

İşlev İşaretçileri

Diğer değerler gibi, işlevleri dinamik olarak kullanmak için işlev işaretçilerini bildirebilir ve kullanabilirsiniz. Bu özellikle geri aramalar ve dinamik işlev yürütme için kullanışlıdır.

int (*operation)(int, int); // Declare a function pointer
operation = add; // Pointer to an add function
int result = operation(5, 3); // Call the function through the pointer

Bu kod, adlı bir işlev işaretçisini bildirir. operasyon bu, iki tamsayı alıp bir döndüren bir işleve işaret edebilir. (bir işaretçi) atar eklemek işlevi operasyon. Daha sonra dolaylı olarak çağrı yapmak için işlem değişkenini kullanır. ekle (5, 3).

Referansla Geçme

İşaretçiler, işlevlere referansla argümanları aktarmanıza olanak tanır ve işlev içindeki orijinal verileri değiştirmenize olanak tanır. Bu, kapsamları dışındaki bir değişkenin değerini değiştirmesi gereken işlevler için çok önemlidir.

voidmodifyValue(int *x){
*x = 42; // Modifies the value of x in the calling code
}

Değeri değiştir işlevi, çağıran kodun kendisine sağladığı argümanın değerini değiştirerek onu 42'ye ayarlar.

Dinamik Bellek Tahsisi

İşlevler işaretçileri dinamik olarak ayrılmış belleğe döndürebilir. Bu, diziler veya bağlantılı listeler gibi sınırsız veri yapıları oluşturup döndürmeniz gerektiğinde yaygındır. Yapmanız gerekecek Yığın ve yığın belleğini iyi kavramak onu kullanmak için.

int *createArray(intsize){
int *arr = (int *)malloc(size * sizeof(int));
return arr;
}

Bu kod bir işlevi tanımlar, CreateArray, bu bir tamsayı alır, boyut, giriş olarak. Fonksiyonun içinde, belirtilen boyuttaki bir tamsayı dizisi için dinamik olarak bellek ayırır. malloc. Diziyi başlattıktan sonra, bu yeni oluşturulan diziye bir işaretçi döndürür.

Ortak Kullanımlar

İşaretçiler C'de çeşitli nedenlerden dolayı önemlidir ve bunlar C'yi Python gibi diğer programlama dillerinden ayırmak. İşte bazı yaygın kullanımlar:

  • Dinamik Bellek Tahsisi
  • Dizi Manipülasyonu
  • Referansla Geçme
  • Veri Yapıları
  • Kaynak yönetimi

İşaretçilerin bu yaygın kullanımlarını anlamak C programlama becerilerinizi geliştirebilir. İşaretçileri anlamanızı geliştirmek için bunlardan bazılarını uygulayın.

C Programlamada İşaretçileri Kullanma Alıştırması

C programlamada işaretçilere hakim olmak, belleği verimli bir şekilde yönetmenize, verileri yönetmenize ve gelişmiş işlemleri gerçekleştirmenize olanak tanıyan değerli bir beceridir. İşaretçilerle pratik yapmak ve yeterlilik, sağlam ve kaynak açısından verimli C programları oluşturma yeteneğinizi büyük ölçüde geliştirecektir.