Özet: İşaretçi ile Dizi Gezinme
Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 11 / 63.
Görev
Kolayİşaretçi aritmetiği ve dizi-işaretçi eşdeğerliğini kullanarak bir tam sayı dizisindeki tüm öğelerin toplamını hesaplayan bir fonksiyon içeren bir C programı yazın. Programınız şunları yapmalıdır:
- İki parametre alan
calculateSumadında bir fonksiyon oluşturun:- Diziyi temsil eden bir tam sayı işaretçisi (
int *arr) - Dizideki öğe sayısını temsil eden bir tam sayı (
size)
- Diziyi temsil eden bir tam sayı işaretçisi (
calculateSumfonksiyonu içinde:- Bir
sumdeğişkenini 0 olarak başlatın - Bir
ptrişaretçi değişkeni oluşturun ve bunu dizinin başlangıcını gösterecek şekilde ayarlayın - İşaretçi aritmetiğini kullanarak diziyi dolaşmak için bir döngü kullanın
- Her yinelemede,
ptrtarafından işaret edilen değerisumdeğişkenine ekleyin - Bir sonraki öğeye geçmek için işaretçiyi artırın
- Hesaplanan toplamı döndürün
- Bir
mainfonksiyonu içinde:- Dizinin boyutunu temsil eden bir
ntam sayısını okuyun nboyutunda bir tam sayı dizisi tanımlayın- Diziyi doldurmak için girdiden
nadet tam sayı okuyun - Dizi ve boyutu ile
calculateSumfonksiyonunu çağırın - Sonucu şu formatta yazdırın: "Sum: [value]"
- Dizinin boyutunu temsil eden bir
Fonksiyon, dizi gezintisi için işaretçi aritmetiği kullanmalıdır - arr[i] gibi dizi indeksleme notasyonunu kullanmayın. Bunun yerine, dizi öğelerine erişmek için işaretçi dereferans (dereferencing) ve artırma işlemlerini kullanın.
Örneğin, girdi şu şekildeyse:
5
10 20 30 40 50Çıktınız şu olmalıdır:
Sum: 150Bu zorluk, fonksiyonların dizileri işaretçi parametreleri olarak nasıl kabul edebildiğini, dizileri verimli bir şekilde dolaşmak için işaretçi aritmetiğinin nasıl kullanılacağını ve dizi adlarının fonksiyonlara aktarıldığında otomatik olarak nasıl işaretçilere dönüştürüldüğünü anlama yeteneğinizi test eder.
Kendin dene
#include <stdio.h>
// TODO: calculateSum fonksiyonunuzu buraya yazın
int main() {
int n;
scanf("%d", &n);
int arr[n];
// Dizi elemanlarını oku
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// TODO: calculateSum fonksiyonunu çağırın ve sonucu saklayın
// TODO: Sonucu "Sum: [değer]" formatında yazdırın
return 0;
}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ı