Yapılara İşaretçiler
Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 44 / 63.
Artık yapılarla çalışmakta rahat olduğuna göre, onları başka bir güçlü C kavramıyla birleştirmenin zamanı geldi: işaretçiler. int veya char gibi temel veri türlerine işaretçiler oluşturabildiğin gibi, bir yapı değişkeninin adresini tutan işaretçiler de oluşturabilirsin.
Bir yapıya işaretçi bildirme sözdizimi, diğer işaretçi bildirimleriyle aynı kalıbı izler:
struct StructureName *pointerName;Örneğin, tanıdık Point yapımızı kullanarak:
struct Point p1 = {10, 20};
struct Point *ptr;Bu, bir Point yapısının adresini depolayabilen ptr adlı bir işaretçi oluşturur. İşaretçinin gerçekten yapı değişkenimizi göstermesini sağlamak için adres operatörünü kullanırsınız:
ptr = &p1;Şimdi ptr, p1 yapı değişkeninin bellek adresini tutuyor. Bu, özellikle yapıları işlevlere aktarırken veya belleği dinamik olarak yönetirken yapılarla çalışmak için yeni olanaklar sunar. Yapılara yönelik işaretçiler, daha karmaşık veri yapıları oluşturmak ve verimli C programları yazmak için gereklidir.
Görev
KolayYapılara işaretçilerle çalışmayı gösteren bir C programı oluştur. Programın şunları yapmalıdır:
- Aşağıdaki üyelerle
Productadlı birstructtanımla:- Ürün kimliğini depolamak için bir tamsayı
id - Ürün adını depolamak için 25 boyutunda bir karakter dizisi
name - Ürün fiyatını depolamak için bir kayan noktalı sayı
price - Mevcut miktarı depolamak için bir tamsayı
quantity
- Ürün kimliğini depolamak için bir tamsayı
- main işlevinde
itemadlı birProductdeğişkeni oluştur ve aşağıdaki değerlerle başlat:- Kimlik: 501
- Ad: "Laptop"
- Fiyat: 899.99
- Miktar: 15
itemPtradlı birProductyapısına işaretçi tanımla- Adres alma operatörünü kullanarak
itemdeğişkeninin adresiniitemPtr'a ata - Yapı üyelerine doğrudan erişerek (nokta operatörünü kullanarak) özgün ürün bilgilerini tam olarak şu biçimde yazdır:
Original Product Info:ID: [id]Name: [name]Price: [price]Quantity: [quantity]
- Yapı üyelerine işaretçi üzerinden erişerek (dereference operatörünü ve nokta gösterimini kullanarak:
(*itemPtr).member) aynı ürün bilgilerini tam olarak şu biçimde yazdır:Product Info via Pointer:ID: [id]Name: [name]Price: [price]Quantity: [quantity]
- İşaretçinin yapıyı doğru şekilde gösterdiğini doğrulamak için bellek adreslerini tam olarak şu biçimde yazdır:
Address of item: [address]Value of itemPtr: [address]Address verification: [result]
Adres doğrulaması için adresler aynıysa Match, farklıysa No Match yazdır.
Bu görev, yapı işaretçisi bildirimi, adres alma operatörünü kullanarak adres atama ve dereference operatörünü nokta gösterimiyle birleştirerek işaretçiler üzerinden yapı üyelerine erişme konusundaki anlayışını sınar. Ayrıca işaretçinin yapı değişkeninin adresini doğru şekilde tuttuğunu da doğrulayacaksın.
Kendin dene
#include <stdio.h>
#include <string.h>
// YAPILACAK: Product yapısını (struct) burada tanımlayın
int main() {
// YAPILACAK: Kodunuzu buraya yazın
// 1. 'item' adlı Product değişkenini oluşturun ve başlatın
// 2. 'itemPtr' adında Product türünde bir işaretçi (pointer) tanımlayın
// 3. 'item' değişkeninin adresini 'itemPtr' işaretçisine atayın
// 4. Nokta operatörünü kullanarak orijinal ürün bilgilerini yazdırın
// 5. (*itemPtr).member kullanarak işaretçi üzerinden ürün bilgilerini yazdırın
// 6. Adresleri yazdırın ve doğrulayın
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