Keil C Struct Pointer

Başlatan kimlenbu, 10 Nisan 2014, 16:08:50

kimlenbu

Selamlar,

typedef struct Deneme
{
uint8_t a;
uint16_t b;
}Deneme;

şeklinde bir tanımlama yapıp

Deneme Dizi[] =
{
{1,2},
{3,4},
{5,6},
}

şeklinde Deneme tipinde bir dizi oluşturduk diyelim.

Ben bu diziye nasil pointer tanimlarim ?

ErsinErce


mir_as82

Hocam beyin firtinasi olması açisindan soruyorum.
Acaba &Dizi[0] da ayni işi görebilir mi?

mufitsozen

#3
Alıntı yapılan: mir_as82 - 10 Nisan 2014, 17:55:40
Hocam beyin firtinasi olması açisindan soruyorum.
Acaba &Dizi[0] da ayni işi görebilir mi?

sizin o firtinayi yapan beyin biraz karismis :P

sayin ersinece degisken nasil tanimlarsiniz onu soyluyor (cunku onu sormussunuz

ama siz bu taninan degisken nasil sizin tanimladiginiz struct array"i gosterir onu yapiyorsunuz.

yani ilk once ersinece"nin tanimladigi gibi degiskeninizi tanimliyacaksiniz, sonra program icinde onu sizin yazdiginiz degere esitleyeceksinizki o struct array" gostersin.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

ErsinErce

ptr = Dizi;
for(i=0;i<3;i++){
x += (ptr + i)->a;
b += (ptr + i)->b;
}


ptr = Dizi;
for(i=0;i<3;i++){
x += *(ptr + i).a;
b += *(ptr + i).b;
}


bu mu sorulmuş?

amaç neyse belki ona göre farklı bir cevap çıkarabiliriz

picusta

&Dizi[0]  de pointer olur, dizinin birinci elemanina.
Tam olarak Dizi ile ayni kapiya çikmaz, örn.  sizeof() fonksyonunu (makrosunu) kullanamazsin.

void Arttir(Deneme *Veri, int len){
int ii;
for (ii = 0; ii<len ;ii++)
 {
 Veri[ii].a++;
 Veri[ii].b++;
 }
}

void main()
{
Arttir(&Dizi[0],sizeof(Dizi)/sizeof(Dizi[0]));
}

ErsinErce

&Dizi[0] pointed register dır yani adres, register pointer adresi taşıyan yerdir, kavramlar karışmasın

mir_as82

Peki hocam,
Deneme türünden bir yapi (veri türü) oluşturduk ve bu yapidan bir pointer tanimladik dimi?
Struct yapisinin pointer i olur mu?yani şunu demek istiyorum örneği oluşturulmamiş bir seyin pointer i olur mu?
Struct türünden oluşturulan verinin başlangıç adresini mi tutar yoksa?
Bu tanımlanan pointer neyi tutar???

ErsinErce


kimlenbu

#9
amacım tam olarak şu : Dizi'yi binary olarak fazla uğraşmadan sd karta kaydetmek. Aynı şekilde tekrar binary olarak okuyup Dizi'ye geri atmaktı

Direkt olarak dizinin adını kullanınca halloldu işim. Teşekkür ederim cevaplar için

res=f_read(&fsrc,Dizi,sizeof(Dizi),&br); ile okuyabiliyorum
res=f_write(&fsrc,Dizi,sizeof(Dizi),&br); ile yazabiliyorum.


picusta

Serialization / deserialization mevzusu.

Yalniz dikkat et, bir sistem yazip, digeri okuyacaksa (MCU vs PC veya baska...),
iki sistemde structure'larin hizalamasi ayni olmayabilir.
align, #pragma pack. vs.. directifleri kullanmalisin o zaman.