C Programlama diliyle şamatalar

Başlatan z, 23 Ekim 2011, 15:32:04

AsHeS

#495
Alıntı yapılan: Klein - 19 Haziran 2013, 18:46:51
soruyu tam anlamadım?
sorduğun doğrudan ulaşma şöyle bir şey mi

struct MyStruct
{
int a;
int b;
int c;
} = { 1,2,3}

bu şekilde de tip tanımı yapmadan , doğrudan yapıyı tanımlayıp erişebilirsiniz.
Klein hocam bazı derleyiciler int* a yaptığımızda bildiğimiz gibi a yı kullanılır halde vermiyorlar yani;
int* a;
(*a)=5;
//Burada hata verir ama bazıları pointerı tanıttığınız anda ona kendine ait adres alanı atayabiliyor.
Adres vermeyip hata veren derleyici(ben standardı bu diye biliyorum) Dev-C++ altında ki gcc derleyicisi, tanımlayıp adres atayan derleyici Keil UV4 altında C51 derleyicisi açıkçası C51 ile yapılan sağlıklı çalışır mı emin değilim.
Yani @muhittin_kaplan ın sorusu şudur bence
struct MyStruct eleman;
*(eleman.a)=5;
yapamayacak mıyız sorusudur.Bence derleyiciye göre değişir.
struct MyStruct
{
    int *a;
    int *b;
    float *c;
};//olarak planlanmıştır.

JKramer

...
birlik ADC = { &x, &y, z};

dedikten sonra yapabilirsiniz.

Pointer'ı tanıttığımızda otomatik olarak bir adrese işaret etmesini ilk defa duydum, neden böyle bir şey yapsın ki?

Klein

Arkadaşın sorusu yapıya ilk değer vermekti. Kullandığı örnekte  pointer olduğu için ona göre cevap verdim.
neden gerekebilir?
Herhangi bir değişkene neden ilk tanımladığımızda değer veriyorsak aynı sebepten.

AsHeS

Alıntı yapılan: Klein - 19 Haziran 2013, 21:22:20
Arkadaşın sorusu yapıya ilk değer vermekti. Kullandığı örnekte  pointer olduğu için ona göre cevap verdim.
neden gerekebilir?
Herhangi bir değişkene neden ilk tanımladığımızda değer veriyorsak aynı sebepten.
Ben doğrudan ulaşamaz mıyız sorusuna cevaben yazmıştım Klein hocam yoksa size saygımız sonsuz  :) .

muhittin_kaplan

sanki ortalığı biraz karıştırmışım.

struct tarih {
   int gun;
   int ay;
   int yil;
} dogum = {22,12,1991};

ile hepsine birden ulaşıyorsunuz. Benim sorduğum (c# ve vb den kalma alışkanlıkla) ise aşağıdaki çözümdü

struct tarih {
   int gun, yil, ay;
} dogum;
dogum.gun = 22;
dogum.ay = 12;
dogum.yil = 1991;

Mr.Java

Şöyle diyeyim;

#include<stdio.h>
int main( void )
{
	int i;
	// Dogum tarihi tutmak icin 
	// 'dogum_tarihi' adinda bir yapi 
	// olusturuyoruz
	struct dogum_tarihi {
		int gun;
		int ay;
		int yil;
	};

	// Kisiye ait bilgileri tutmak 
	// icin 'sahis_bilgileri' adinda 
	// bir yapi kuruluyor. 
	struct sahis_bilgileri {
		char isim[40];
		int boy;
		struct dogum_tarihi tarih;
	};

	// Dizi elemanlarina ilk deger atamasi yapiyoruz.
	struct sahis_bilgileri kisi[3] = { "Ali", 170, { 17, 2, 1976 }, 
					"Veli", 178, { 14, 4, 1980 }, 
					"Cenk", 176, { 4, 11, 1983 } };


Yapı dizisini ekrana nasıl yazdıracağım ?

JKramer

boy isimli integer değişkenini nasıl yazdırıyorsanız kisi[0].boy'u da aynı şekilde yazdırabilirsiniz. Structure'ın içinde olunca integer'lığından bir şey kaybetmiyor :). (bkz:o kadar strong bir presence var ki)

fatih6761

Alıntı yapılan: muhittin_kaplan - 20 Haziran 2013, 09:42:57
sanki ortalığı biraz karıştırmışım.

struct tarih {
   int gun;
   int ay;
   int yil;
} dogum = {22,12,1991};

ile hepsine birden ulaşıyorsunuz. Benim sorduğum (c# ve vb den kalma alışkanlıkla) ise aşağıdaki çözümdü

struct tarih {
   int gun, yil, ay;
} dogum;
dogum.gun = 22;
dogum.ay = 12;
dogum.yil = 1991;

Hocam son verdiğiniz kod parçasında atamalar nerede yapılıyor? Global section'da yapamazsınız. İllâ ki bir fonksiyon içinde olması lazım.(C için)
Ya da constructor yani yapıcı fonksiyonlardan mı bahsediyorsunuz?
C#'ta
private struct Tarih
{
	public int Gun;
	public int Ay;
	public int Yil;
	
	public Tarih()
	{
		Gun = 20;
		Ay = 6;
		Yil = 2013;
	}
}

Eğer kastettiğiniz bu ise bu özellik C de yok. Yapıcı/ilklendirici fonksiyonlar aslında C++ ile class/sınıflarda vardır. C++ ile struct'ın sınıftan pek farkı kalmadığından C# ta bundan etkilenmiştir.
Struct belleğe yüklenirken .ctor yani yapıcı fonksiyonu çağrılır. Sizin verdiğiniz ilk değerler debir fonksiyon ile yerine aktarılır.

muhittin_kaplan

dogum.gun = 22;
dogum.ay = 12;
dogum.yil = 1991;


Hocam tabiki bir fonksiyonda yazılması gerekir. örnek olması açısından yapıştırmıştım.

muhittin_kaplan

değişik bir yapı gördüm yada bana öyle geldi.

zavazing.h içerisinde
typedef struct {
    int a;
    int b;
    int c;
    int d;
} DenemeData;


var.

abidikgubidik.c de

DenemeData Bilgiler;


var. Buradan Anlamam Gereken Şu mudur ?

Oluşturulmuş DenemeData Adındaki tipim e Bu dosyanın içerinde Bilgiler Olarak Ulaşacağım. Örneğin Bilgiler.a, Bilgiler.b gibi

Klein

#505
Evet aynen öyle. Daha doğrusu şöyle.
Header içinde DenemeData isimli yeni bir tip tanımladın. .C programı içinde de bu tipten bir değişken yarattın.
Ama neden değişik geldi anlamadım. Son zamanlarda STM32'nin kütüphane dosyalarında onlarca kez gördün ve kullandın.
Kütüphanedekiler pointer olarak tanımlandığı için "x.y" şeklinde değil "x->y" şeklinde ulaştın. 

muhittin_kaplan

Ne bileyim Garip Geldi. (Uzun Zamandır Kod Yazmıyorum Ondandır.)

muhittin_kaplan

kafama takılan yeri şimdi daha iyi anladım.

DenemeData Bilgiler
ile nasıl bir tanımlama yapıyor?

int a deken a nın integr olduğunu anlıyourm.buradaki denemeData bir tip olduğu için aslında "kendim oluşturduğum" bir data type ı tanımlamış oluyorum değil mi ?


Klein


teknikelektronikci

benimde bir sorum olsun :)
ilkin c++ ile programlama yapan arkadaslar visual (görsel) kismi naasil hallediyorsunuz ? qt ilemi?

ikincisi asagidaki program parcasi tam ollarak ne yapar ?

g_pHF->SetAndCheckMotorOutputs(DF_MIN_MOT_CURRENT_TEST1, DF_MAX_MOT_CURRENT_TEST1, DF_TOLERANCE_MOT_CURRENT_TO_REAL_TEST1);


DF ile baslayanalr include da tanimlanmis sabit degerler ama benim anlamadiigm nokta bu basdaki g_pHF -> parcasi ne yapar ? sanirim bu OOP ile ilgili olsa gerek (OOP: objekt oriented programing)
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!