c de anlayamadığım kod

HelloWorld12
27-11-2017, 22:23   |  #1  
HelloWorld12 avatarı
OP Taze Üye
Teşekkür Sayısı: 0
2 mesaj
Kayıt Tarihi:Kayıt: Kas 2017

merhaba c de şu kodu anlayamadım ekrana 3 basıyor yardım eder misiniz
#include<stdio.h>
unsigned int (*f())[4]{   //(*f())[4]  ne anlama geliyor?
static unsigned int d[4] = {-1,3,1,11};
return &d;
}
int main(){
unsigned int (*p)[4];
p = f();
printf("%d" , *(*p+1));  
return 0;
}

Sistem Bilgilerim
errorno
18-12-2017, 23:54   |  #2  
Taze Üye
Teşekkür Sayısı: 1
16 mesaj
Kayıt Tarihi:Kayıt: Ara 2017
Alıntı: HelloWorld12  
merhaba c de şu kodu anlayamadım ekrana 3 basıyor yardım eder misiniz
#include
unsigned int (*f())[4]{ //(*f())[4] ne anlama geliyor?
static unsigned int d[4] = {-1,3,1,11};
return &d;
}
int main(){
unsigned int (*p)[4];
p = f();
printf("%d" , *(*p+1));
return 0;
}
Merhaba,
f() : parametresi void olan bir fonksiyon prototip tanımlamasıdır.
*f() : parametresi void olan bir fonksiyonu gösterici ile işareteden bir fonksiyon tanımlamasıdır.
unsigned int *f() :  geri dönüş değeri unsigned int olan ve parametresi void olan bir fonksiyonu gösterici ile işareteden bir fonksiyon tanımlamasıdır.

Bir fonksiyon prototipi oluşturulmuş ve aynı zamanda gövdesi yazılmıştır. Geri dönen değer unsigned int tipindedir ve köşeli parantezlerin içineki değer, fonksiyondan dönebilecek ve değer olarak alınabilecek (aynı zamanda işaret edilebilecek) üst limitin kendisidir.

main programının ilk satırında  (C'de main bir programdır. Daha doğrusu literatürde, her C fonksiyonu birer programdır ve main ise ana programdır.) bir dizi göstericisi tanımlanmıştır. Ardından bu göstericiye de yukarıda bahsettiğim fonksiyon kendisi direkt atanmıştır. Nasıl bir dizi göstericisine gösterici bir fonksiyon atanıyor.. ? Yukarıda bahsi geçen fonksiyonun kendisinden dönen değer zaten gövdesinde de görüldüğü gibi main programının ilk satırındaki tanımlamaya eşittir. Dolayısıyla sağ ve sol değerlerde ve atanmada herhangi bir problem yoktur.

printf ile basılan değer ise p göstericisinin gösterdiği yerdeki dizinin birinci elemanıdır. Yanılmıyorsam +1 kısmını printf içerisinden kaldırırsanız -1 basacaktır. Yani ilk elemanı. Ancak bu kesin bir bilgi değildir, çünkü C ve C++ dillerinde atanmamış değerlerin kesinliği yoktur. Neyse konumuz bu değil. p'nin gösterdiği yerdeki (yani göstericideki dizinin) birinci elemanı getiriliyor. Bu da tabii ki 3 olacaktır.

Umarım anlatımda bir bozukluk veya karmaşıklık yoktur.

Forumda yeniyim bu arada, herkese merhabalar.

Saygılarımla