Fonksiyonlara İşaretçi Gönderme
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 26 / 63.
Değerle çağırmanın (pass-by-value) sınırlamalarını anladığınıza göre, fonksiyonlara işaretçi (pointer) aktarmanın bu sorunu nasıl çözdüğünü keşfedelim. Bir değişkenin değerinin bir kopyasını aktarmak yerine, değişkenin bellek adresini fonksiyona aktarabilirsiniz.
Bir fonksiyona bir işaretçi (pointer) geçirdiğinizde, fonksiyon orijinal değişkenin bellekteki konumuna erişim sağlar. Bu, fonksiyonun verinin sadece bir kopyasıyla değil, doğrudan orijinal veriyle çalışabileceği anlamına gelir.
void processValue(int *ptr) {
// ptr orijinal değişkenin adresini tutar
// Fonksiyon artık o bellek konumuna erişebilir
}
int main() {
int x = 10;
processValue(&x); // x'in adresini geçir
return 0;
}Değişkenin adresini iletmek için fonksiyonu çağırırken adres operatörünü & nasıl kullandığımıza dikkat edin. Fonksiyon parametresi, bir tam sayıya (integer) işaretçi almayı beklediğini belirtecek şekilde int *ptr olarak bildirilmiştir. Bu temel teknik, fonksiyonların programınızın verileriyle etkileşime girmesi için güçlü olanaklar sunar.
Görev
KolayFonksiyonlara işaretçi (pointer) aktarımını gösteren bir C programı yazın. Programınız şunları yapmalıdır:
- Parametre olarak bir tam sayı işaretçisi alan
displayValueadında bir fonksiyon oluşturun displayValuefonksiyonu içinde, bellek adresindeki değere erişmek için dereference (içerik) operatörünü kullanın ve şu formatta yazdırın:Value at address: [value]mainfonksiyonunda,numberadında bir tam sayı değişkeni tanımlayın ve ona 42 değerini atayın- Orijinal değeri şu formatta yazdırın:
Original value: [value] displayValuefonksiyonunu çağırın ve adres operatörünü kullanaraknumberdeğişkeninin adresini geçirin- Fonksiyon çağrısından sonra bir onay mesajı yazdırın:
Function call completed
Çıktınız, fonksiyonun orijinal değişkenin bellek adresini başarıyla aldığını ve bu adrese eriştiğini göstermelidir:
Original value: 42
Value at address: 42
Function call completedBu görev, fonksiyonlara işaretçi aktarma temel kavramını tanıtarak, fonksiyonun bir değerin kopyasıyla çalışmak yerine orijinal değişkenin bellek konumuna erişmesine olanak tanır.
Kopya kağıdı
İşaretçileri fonksiyonlara aktarırken, fonksiyon değerin bir kopyası yerine orijinal değişkenin bellek konumuna erişim sağlar.
Bir değişkenin adresini bir fonksiyona aktarmak için adres (address-of) operatörünü & kullanın:
void processValue(int *ptr) {
// ptr orijinal değişkenin adresini tutar
// Fonksiyon artık o bellek konumuna erişebilir
}
int main() {
int x = 10;
processValue(&x); // x'in adresini aktar
return 0;
}Fonksiyon parametresi, bir tam sayıya işaretçi almayı beklediğini belirtmek için int *ptr olarak bildirilir.
Kendin dene
#include <stdio.h>
// YAPILACAK: displayValue fonksiyonunuzu buraya yazın
int main() {
// YAPILACAK: Kodunuzu buraya yazın
// 1. number değişkenini tanımlayın ve başlatın
// 2. Orijinal değeri yazdırın
// 3. displayValue fonksiyonunu çağırın
// 4. Tamamlanma mesajını 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ı