- , && ve , & ikiside oluyor fakat DİKKAT ---------!!!!!! ÖNEMLİ NOT: Özetle işlemlerinizi hızlandırmak istiyorsanız; AND kullanacağınız zaman, && operatörüyle çalışın ve yanlış olması muhtemel olan koşulu sol tarafa koyun. Eğer OR operatörü kullanacaksanız, doğru olma ihtimali fazla olan koşulu, ifadenin soluna koyun ve operatör olarak || ile çalışın. Bu şekillde yazılan bir program, kısa devre operatörleri sayesinde, gereksiz kontrolden kaçınarak işlemlerinizi hızlandıracaktır .
Elbette & veya | operatörlerinin kullanılması gereken durumlarda olabilir. Her n'olursa olsun, koşulun iki tarafınında çalışmasını istiyorsanız, o zaman & ve | operatörlerini kullanmanız gerekmektedir.
.f veya .2f veya .3f veya .4f bizim sayımızın vigülden sonra kac basamak gösterecegini belirtir mesela .2f virüglden sonra iki basamak gösterir
define ile atama yaparız ...belli bi yerden sonra eger define geçersiz olsun istersek #undef ile iptal ederiz. ................... . #ifdef (if defined - şayet tanımlandıysa) veya #ifndef (if not defined - şayet tanımlanmadıysa) operatörleri kullanılır.
Önemli Noktalar...
Konuyu noktalarken, söylemek istediğim bazı şeyler bulunuyor. Olabildiğince, önişlemci komutlarından - #include komutu hariç - uzak durun. Çünkü bu komutlar, esnek bir yapıya sahip değiller ve bu durum, bir noktadan sonra başınızı ağrıtacaktır. Önişlemci komutlarıyla yazılmış kodları takip etmek oldukça zordur ve debug edilemezler. Java gibi gelişmiş dillerde, #define komutu bulunmaz. Modern dillerde, bu yapıdan uzaklaşılmaya başlanmıştır.
- Değişken: Deger Tutar Pointer : Adres Tutar Pointer önüne *alır ...Float Bir değişken int bir pointera işaretlenemez ....pointerın içini okumak için *p ile olur... Bir Degiskenin Adresini Pointera atarken degiskenin başına & koyulur
int a=10,b;
int *p;
p=&a; //tutuldugu adresi atadık
printf("Pointer %d \n",p);
printf("Anın Degeri %d \n",a);
b=*p;
printf("B nin Degeri %d \n",b);
& ADRES ATAR
* İÇERİK OKUR
- . Eğer, pointer işaret eden bir pointer'i işaret edecek bir pointer tanımlamak istiyorsanız, üç defa yıldız ( *** ) yazmanız gerekir
int x=100;
int *p,**r,***s;
printf("X in İlk Değeri %d \n",x);
p=&x;
r=&p;
s=&r;
***s=9999;
printf("X in Son Değeri %d \n",x);
ARTIK X in Degeri 9999 oldu
Dizilerdede Benzr Durum vardır dizinin 0.elemanı *(ptr +0) dır....5.eleman mesela *(ptr+4) dür
- ÖNEMLİ: Fonksiyonla Sadece Bir Deger Degilde Birden Fazla Deger Döndüreceksek Bunu degiskenlerle yapmak zor cünkü RETURN sadece Bir Deger Döndürür oyüzden Referansla Arguman Aktarmamız Gerekir
örnegin:Bölme işlemi Yapacak Bir Fonksiyon Bize Bölüm ve Kalan Olmak üzere İki Deger Döndürecek oyüuzden ..Referans yoluyla argün aktarmalıyız ...
#include
int bolme_islemi( int bolunen, int bolen, int *kalan )
{
*kalan = bolunen % bolen;
return bolunen / bolen;
}
int main( void )
{
int bolunen, bolen;
int bolum, kalan;
bolunen = 13;
bolen = 4;
bolum = bolme_islemi( bolunen, bolen, &kalan );
printf( "Bölüm: %d Kalan: %d\n", bolum, kalan );
return 0;
}
- Biz Her Zaman Fonksiyonu main in üstüne Yazarsak Bi süre Sonra Main Fonksiyonu Kodlar altında kaybolur..oyüzden mainin altındada fonksiyon tanımlanabilir Sadece En üstte fonksiyonu tanımlarız bu kafidir
#include
int bolme_islemi( int, int, int * ); //DİKKAT ........!!!!
int main( void )
{
int bolunen, bolen;
int bolum, kalan;
bolunen = 13;
bolen = 4;
bolum = bolme_islemi( bolunen, bolen, &kalan );
printf( "Bölüm: %d Kalan: %d\n", bolum, kalan );
return 0;
}
int bolme_islemi( int bolunen, int bolen, int *kalan )
{
*kalan = bolunen % bolen;
return bolunen / bolen;
}
- Dinamik Bellek Yönetimi Malloc ve Callocla Yapılır..bunun icin #include eklenmeli programımıza
calloc ile malloc farkı calloc olusturdugu alanlara hep 0 degerini atar..fakat malloc hic bir deger atamaz kullanımları ise
isaretci_adi = calloc( eleman_sayisi, her_elemanin_boyutu );
isaretci_adi = malloc( eleman_sayisi * her_elemanin_boyutu );
en sonunda free(dizi) deyip alanları boşaltıyoruz
Hafıza alanı ayırırken bazen bir problem çıkabilir. Örneğin bellekte yeterli alan olmayabilir ya da benzeri bir sıkıntı olmuştur. Bu tarz problemlerin sık olacağını düşünmeyin. Ancak hafızanın gerçekten ayrılıp ayrılmadığını kontrol edip, işinizi garantiye almak isterseniz, aşağıdaki yöntemi kullanabilirsiniz:
dizi = calloc( eleman_sayisi, sizeof( int ) );
// Eger hafiza dolmussa dizi pointer'i NULL'a
// esit olacak ve asagidaki hata mesaji cikacaktir.
if( dizi == NULL )
printf( "Yetersiz bellek!\n" );
- C de String Atamak KATAR demektir atamasını ise char isim[30] şeklinde yaparız burada 29 karakter alır.en son karakter otomatik \n dir bu sonu gösterir Daha Fazla Karakter almak ve boşluk bırakınca yazmayı bırakmamamsı icin get ve puts kullanırız.
- Yeni Degişken Tipi Oluşturma ENUM ile
enum ana_renkler {
Kirmizi,
Mavi,
Sari
};
// Degiskeni tanimliyoruz.
enum ana_renkler piksel;
// Degisken degerini Mavi olarak belirliyoruz.
// Dilersek Sari ve Kirmizi da girebiliriz.
piksel = Mavi;
///ana_renkler SANKİ İNTEGER PİKSEL ise Degisken adı mesela X gibi
İNTEGERA verilebilecek degerler ise kırmızı mavi sari
DEGİŞKEN ADI DEGİSTRME : TYPEDEF
her seferinde int yazmak istemiyoruz örneğin sadece x deyince anlaşılsın istiyoruz ozmn typedefle degistiririz...
typedef int i ;
i sayi=5 diyerek artık int demeden sadece i diyerek degiskeni tanımlayaibiliriz
- Structlar ile bilgileri gruplaya biliriz örnegin bir kişi oluştur telefonu adresi yaşını yaz gibi...
struct { int tel; int yas} kisi ;
#include
int main( void )
{
struct {
int yil;
int ay;
int gun;
} siz, kiz_kardes, erkek_kardes;
printf( "Doğum gününüzü giriniz> ");
scanf( "%d-%d-%d", &siz.gun,
&siz.ay,
&siz.yil );
printf( "Kız kardeşiniz> " );
scanf( "%d-%d-%d", &kiz_kardes.gun,
&kiz_kardes.ay,
&kiz_kardes.yil );
printf( "Erkek kardeşiniz> " );
scanf( "%d-%d-%d", &erkek_kardes.gun,
&erkek_kardes.ay,
&erkek_kardes.yil );
return 0;
}
İÇ İÇE STRUCT yapıları kullanabiliriz ..mesela kişi oluşturup içinde dogum gününü tutabiliriz
#include
int main( void )
{
struct {
char isim[40];
int boy;
struct {
int yil;
int ay;
int gun;
} dogum_bilgileri;
} kisi;
printf( "Adınız: " );
scanf( "%s", kisi.isim );
printf( "Boyunuz: " );
scanf( "%d", &kisi.boy );
printf( "Doğum tarihi: ");
scanf( "%d-%d-%d", &kisi.dogum_bilgileri.gun,
&kisi.dogum_bilgileri.ay,
&kisi.dogum_bilgileri.yil );
printf( "Girilen bilgiler:\n" );
printf( "İsim: %s\n", kisi.isim );
printf( "Boy: %d\n", kisi.boy );
printf( "Doğum tarihi: %d/%d/%d\n", kisi.dogum_bilgileri.gun,
kisi.dogum_bilgileri.ay,
kisi.dogum_bilgileri.yil );
return 0;
}
- STRUCT İLE FUTBOLCU OLUŞTURMA
#include
int main(void)
{
struct {
char ad[50];
int yas;
struct{
int hiz,guc;
char ayak[20];
}yetenek;
}oyuncu={"ali",66,{2,4}};
printf("Adi %s ",oyuncu.ad);
printf("yas %d ",oyuncu.yas);
printf("Hiz %d ",oyuncu.yetenek.hiz);
}