On Tuesday, 24 May 2022 at 13:42:44 UTC, Ali Çehreli wrote:
> On 5/23/22 22:26, Salih Dincer wrote:
[...] Şu program açıklayıcı olabilir:
import std.stdio;
import core.stdc.stdlib;
struct S {
int i;
}
[...]
Hocam D'nin gözünü seveyim bea! Kodu C'de yazayım dedim o tutorial senin burdaki benim uğraştım durdum 😀
Neyse, bu örnek çok iyi oldu. Neticede bilgilerimizi tazeledik. Hele ki bunca seneden sonra, devamının olduğunu bildiğimiz bir işaretçi üzerinde, sanki bir diziymiş gibi kullanılabildiğini öğrenmek güzeldi.
Ben de D özelliği zannediyordum, teşekkürler...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct S {
int8_t id;
char name[6]; // 5 + 1(\0)
};
const int CITY = 35;
int main()
{
int n = 0;
struct S s, *ptr;
ptr = (struct S*) malloc(CITY * sizeof(struct S));
printf("ilk adresi: %p\n", ptr); // 0x55aca99ec260
for(int i = 0; i < CITY; ++i)
{
ptr[i].id = i + 1;
}
printf("plaka kodu: %d\n", ptr[n].id);
strcpy(ptr[n].name, "adana");
printf("ilin ismi : %s\n", ptr[n].name);
n = CITY - 1;
printf("plaka kodu: %d\n", ptr[n].id);
strcpy(ptr[n].name, "izmir");
printf("ilin ismi : %s\n", ptr[n].name);
for(int i = 0; i < CITY; ++i)
{
printf("%d: %s\n", ptr[i].id, ptr[i].name);
}
printf("son adresi: %p\n", &ptr[n]); // 0x55aca99ec34e
/* Son adresinden (...34e) ilk adresi (...260)'ı çıkarınca
* 0xEE kalıyor ki bu onluk 238 demek ve bunu 34'e bölünce 7
* değeri bulunuyor. Yani S yapısı 1 + 6 baytdan oluşuyor.
*/
s = ptr[0];
ptr[0].id = 0;
printf("%s'nın plaka kodu: %d\n", s.name, s.id);
return 0;
} /* ÇIKTISI:
ilk adresi: 0x55aca99ec260
plaka kodu: 1
ilin ismi : adana
plaka kodu: 35
ilin ismi : izmir
1: adana
2:
3:
...
35: izmir
son adresi: 0x55aca99ec34e
adana'nın plaka kodu: 1
*/