Selamlar, bilgisayar olimpiyatlarına hazırlanmaya çalışıyorum ancak aşağıdaki kodun mantığını pek kavrayamadım. Çözümüne de baktım ancak pek anlam veremedim. Memset fonksiyonundaki mantığını anlamamda yardımcı olursanız çok sevinirim.
void main(void) {
int *a, i, s=0;
a= (int *) malloc(20*sizeof(int));
if (a!=NULL) {
memset(a, 1, 20*sizeof(int));
for (i=0;i<20;i++)
s+=i*a[i];
}
printf("%d", s);
}
Programı inceleyelim:
• Tam sayı gösterisi a, alınan 20 tam sayıdan oluşan bir dizinin ilk elemanını gösterir.
memset fonksiyonu ile a’nın içerisindeki değerler 2⁰ + 2⁸ +2¹⁶ + 2²⁴‘e eşitlenir
• memset fonksiyonu içerisine bir karakter dizisi, eşitlenecek değer, ilk kaç basamağın eşitlenmesi gerektiğini alır
ve o karakter dizisinin ilk verilen bir değer kadar elemanını verilen başka bir değere eşitler.
• Yani 20 uzunluğunda tamsayı dizisi verilirse ki bu 80 uzunluğundaki bir karakter dizine denk gelir, ve ilk 80
elemanın değeri 1’e eşitlenirse, bu dizideki her tamsayı 4 karaktermiş gibi işleme tabii tutulur ve her bir karakter
1’e eşitlenir.
Yani çıktıya s=20*(2⁰ + 2⁸ +2¹⁶ + 2²⁴) yazdırılır.