İşaretçiler ile Değişkenleri Değiştirme
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 27 / 63.
Artık işaretçilerin gerçek gücünden yararlanabilirsiniz: orijinal değişkeni bir fonksiyon aracılığıyla değiştirmek. Bir fonksiyona bir işaretçi geçirdiğinizde, fonksiyon o bellek adresinde saklanan değeri değiştirmek için dereference (başvuru giderme) operatörünü kullanabilir.
Fonksiyonun içinde, orijinal değişkenin değerine erişmek ve onu değiştirmek için * operatörünü kullanarak işaretçinin başvurusunu çözersiniz (dereference). Bu teknik, değişkenin bellekteki konumuna bir referans gönderdiğiniz için pass-by-reference olarak adlandırılır.
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // Orijinal değeri değiştirmek için dereference yapın
}
int main() {
int x = 5;
doubleValue(&x); // x'in adresini gönderin
// x artık 10!
return 0;
}Anahtar nokta, işaretçinin tuttuğu bellek adresindeki değeri değiştirmek için atamanın sol tarafında *ptr kullanmaktır. Bu, fonksiyonların çağıran fonksiyondaki değişkenleri kalıcı olarak değiştirmesine olanak tanıyarak, değer ile geçmenin (pass-by-value) tek başına başaramayacağı güçlü programlama olanakları sunar.
Görev
KolayBir tam sayının değerini üç katına çıkaran bir fonksiyon oluşturarak, işaretçiler (pointers) aracılığıyla değişkenlerin değiştirilmesini gösteren bir C programı yazın.
Programınız şunları yapmalıdır:
- Parametre olarak bir tam sayı işaretçisi alan
tripleValueadında bir fonksiyon oluşturun tripleValuefonksiyonu içinde, bellek adresindeki değeri 3 ile çarpmak için dereference (adresteki değere erişim) operatörünü kullanıntripleValuefonksiyonu içinde, yeni değeri şu formatta yazdırın:Value tripled to: [value]mainfonksiyonunda,numberadında bir tam sayı değişkeni tanımlayın ve ona 8 değerini atayın- Orijinal değeri şu formatta yazdırın:
Original value: [value] tripleValuefonksiyonunu çağırın ve adres operatörünü kullanaraknumberdeğişkeninin adresini geçirin- Fonksiyon çağrısından sonra,
numberdeğişkeninin son değerini şu formatta yazdırın:Final value: [value]
Çıktınız, fonksiyonun işaretçi aracılığıyla orijinal değişkeni başarıyla değiştirdiğini göstermelidir:
Original value: 8
Value tripled to: 24
Final value: 24Bu meydan okuma, fonksiyonun işaretçiyi dereference ederek ve o bellek konumundaki değeri değiştirerek orijinal değişkeni kalıcı olarak değiştirebildiği, işaretçiler kullanarak referansla geçme (pass-by-reference) yönteminin gücünü göstermektedir.
Kendin dene
#include <stdio.h>
// TODO: tripleValue fonksiyonunuzu buraya yazın
int main() {
// TODO: Kodunuzu buraya yazın
// number değişkenini tanımlayın ve başlatın
// Orijinal değeri yazdırın
// tripleValue fonksiyonunu çağırın
// Son değeri 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ı