Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Struct Union...

Başlatan Erol YILMAZ, 11 Şubat 2006, 19:21:36

Erol YILMAZ

union birim
{
  unsigned int rakam;
  unsigned char ttext[5];
};

union birim  sayi[25];

int main( void )
{

  sayi[1].rakam=65;
  sayi[1].ttext="wwww";

  return 0;
}


Bu kodda yanlis olan nedir ? Ariyorum bulamadim.

arslan74

Merhaba,

Sen tam olarak ne yapmaya çalıştığını acıklarsan sana daha iyi yardımcı oluruz.


Selamlar,

piedos

union tanımlamana gerek yok!

struct işini görür
Einstein: "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former."

Erol YILMAZ

struct mytip
{
   unsigned long int akim;
   unsigned int gerilim;
   int1 pompa;
   int1 yuzde;
};

struct mytip datas[26];


Bu sekilde oldu. Union olarak ne farki var, onu da bilmiyorum. Ama
ilk once mytip dedigim veri yapisini olusturdum, Daha sonra bunu dizi seklinde kullandim.

ilk ornekteki hatam stringe veri aktarma sekliymis.

piedos

Union un farki:


#include "stdio.h"
struct egitim_durumu{
char bolumuyle_ilgili_is_yapiyor_mu[10]; //evet hayir
char mezun_oldugu_bolum[10];// insaat - elektrik - makine
char doktora[10]; //evet-hayir      
};

struct kisisel_bilgiler{
char cinsiyet[10];
int boy;    
int yas;
char ad[10];
char soyad[10];
char dogum_yeri[10];        
};

struct elektronik_bilgisi{
char pic_biliyor[10];//evet,hayir
char fpga_in_adini_duymus[10];
int pic_proje_com_forumuna_kac_mesaj_yazmis;           
};


union adamin_biri{
struct egitim_durumu e_d;
struct kisisel_bilgiler k_s;
struct elektronik_bilgisi e_b;
int bu_adam_kacinci_adam;    
};            

int main()
{
union adamin_biri pic_proje_kullanici_listesi[40];

//diyelim ki ben 22. adamım
strcpy(pic_proje_kullanici_listesi[21].e_d.bolumuyle_ilgili_is_yapiyor_mu,"evet");
strcpy(pic_proje_kullanici_listesi[21].e_b.pic_biliyor,"tabiki");

pic_proje_kullanici_listesi[21].e_b.pic_proje_com_forumuna_kac_mesaj_yazmis = 50;

pic_proje_kullanici_listesi[21].bu_adam_kacinci_adam = 22;

getch();    
return 0;    
}    
Einstein: "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former."

Erol YILMAZ

Piedos ayrintili aciklaman icin teşekkürler, gercekten faydali oldu.
Ayrica strcpy de stringe veri aktarimi yaparken,

pic_proje_kullanici_listesi[21].e_d.bolumuyle_ilgili_is_yapiyor_mu

ile

pic_proje_kullanici_listesi[21].e_d.bolumuyle_ilgili_is_yapiyor_mu[0]

arasinda fark var mi?  Ikiside ayni isi yapiyor gibi gorunuyor.

piedos

eğer stringe string kopyalayacaksan
  • kullanma!

    ama fantezi yapmak istersen mesala;

    char lakap[15];

    strcpy(lakap, "pic");
    //ya da
    //strcpy( &(lakap[0]), "pic"); //ikisi aynı
    //ama aşagıdaki bence hata verebilir:
    //strcpy( lakap[0], "pic");

    strcpy( &(lakap[3] ) , "_ustasi");


    şimdi lakap in içinde pic_ustasi yaziyor

    c++ a bir bak bence
Einstein: "Only two things are infinite, the universe and human stupidity, and I'm not sure about the former."

Erol YILMAZ

Tamam kullanmam ama niye?
Bunu aciklarsan niyesiyle birlikte ogrenmis olurum.

Biraz hazir bilgi istiyorum. :D
Sana verdigim zahmet icin kusura bakma.

arslan74

char lakap[15]; 

strcpy(lakap, "pic"); 
//ya da 
//strcpy( &(lakap[0]), "pic"); //ikisi aynı 
//ama aşagıdaki bence hata verebilir: 
//strcpy( lakap[0], "pic"); 

strcpy( &(lakap[3] ) , "_ustasi");


strcpy() fonksiyonu  string kütüphanesinde tanımlı ve char tütünden bir dizi başka bir diziye kopyalayan bir fonksiyon.

Fonksiyon prototip bildirimide iki tane char türünden dizinin adresini alıp işliyor. Yani bu durumda sen bu fonksiyona iki tane (char *) türünden bir değer girmelisin.

Bir dizinin isimi kullanıran derleyici bunu dizinin başlangıç adresi olarak ele alır.
Yada dizinin ilk yani sıfırıncı bilgisinin adresini verirsende olur. örnek olarak arkadaş vermiş "&lakap[0]" gibi.
Başlangıc adresini istediğin sıradan başlatak için oranın adresini vermelisin örnek "&lakap[3]" gibi.

"&" operatörü adres alma operatörü olarak görev yapiyor. "lakap[0]" şeklinde yazarsan bu şu anlama geliyor, dizini ilk elemanının tuttuğu değer anlamında. ama "&lakap[0]" dersen dizinin ilk elemanın adresi dersin.