Diğer İşlemler

? İşlemi

Bu işlem şu şekilde kullanılır:

İfade1 ? İfade2 : İfade3

Burada İfade1'in doğruluğu yanlışlığı değerlendirilir. Eğer İfade1 doğruysa İfade2'nin değeri tüm ifadenin değeri olur, aksi durumda İfade3'ün değeri tüm ifadenin değeri olur. Örneğe bakalım:

#include <stdio.h>

int main(void){
    char a;
    scanf("%d",&a);
    char b=1;
    char c=a>5?b++:4;
    printf("%d\n",b);
    printf("%d",c);
    return 0;
}

Koddan istenen işlemler yapıldıktan sonra b ve c değerlerinin yazdırılmasıdır. a'ya ilk değeri kullanıcının vermesi istenmiştir. Daha sonra c'ye "a>5 ? b++ : 4" ifadesinin değeri atanmıştır. Burada önce "a>5" ifadesi değerlendirilir. a'ya ilk değer olarak 4 atansın. Bu durumda bu ifade yanlıştır. Bu nedenle "b++" hiç uygulanmayacak ve tüm ifadenin değeri 4 olacaktır. O zaman c'nin değeri de 4'tür. Çıktımız da şu şekildedir:

1
4

Eğer a'ya 4 değil de 6 değeri atanırsa a>5 doğru olur ve b'nin mevcut değeri c'ye atanıp sonra da b'nin değeri 1 arttırılır. Yani çıktımız şu olur:

2
1


İşaretçi İşlemleri

İşaretçi bir değişkenin bellekteki adresidir. Özellikle bir adres üzerinde depolanması istenmiş olan değişkene de işaretçi değişkeni denir. İlerleyen kısımlarda işaretçileri daha detaylı inceleyeceğiz fakat şimdilik kısaca özetlemek yararlı olabilir.

İlk işaretçi operatörü & sembolüdür. Bit işlemi olan ve ile aynı sembol kullanılmıştır. Fakat işaretçi işlemi olan & diğerinin aksine tek değişkenle birlikte kullanılır. Örneğin "c=&a;" ifadesine bakalım. Burada c'ye a'nın değeri değil bellekteki adresi atanacaktır.

Diğer işaretçi operatörü ise * sembolüdür. Bu işlem de çarpım işlemi ile aynı sembolü kullanmaktadır fakat aynı şekilde bu işlem de çarpım işleminin aksine tek değişkenle birlikte kullanılır. Örneğin "b=*c;" ifadesine bakalım. Burada b'ye c adresinde kayıtlı olan değer atanacaktır.

Yukarıdaki iki ifadeyi özetleyecek olursak önce c'ye a değişkeninin tutulduğu bellek adresi atanır sonra da b'ye c adresindeki değişkenin değeri atanır. Yani kısaca b'ye a'nın değeri atanmış olacaktır.

Yukarıdaki örneği koda dökelim:

#include <stdio.h>

int main(void){
    char a=5;
    char *c;
    c=&a;
    char b=*c;
    printf("%d",b);
    return 0;
}

Çıktımız 5 olacaktır. Burada dikkat edilmesi gereken şudur; c değişkeni "char *c" şeklinde tanımlanmıştır. Bu c değişkeninin bir adres depolayacağını ve bu adresteki değişkenin tipinin char olacağını belirtir. c'nin tipi char değildir.

İşaretçiler ve değişkenler aynı satırda da tanımlanabilirler. Örnek;

int a, b, *c;


sizeof İşlemi

sizeof işlemi bir veri tipinin veya değişkenin bellekte kaplayacağı alanı byte cinsinden verir.

#include <stdio.h>

int main(void){
    double a=5.0;
    char *c;
    c=&a;
    printf("%d\t",sizeof a);
    printf("%d\t",sizeof (short int));
    return 0;
}

Bu kodun çıktısı şu olacaktır:

8        2

sizeof işlemi değişkenle birlikte kullanılırken "sizeof değişken_ismi" şeklinde kullanılır, paranteze gerek yoktur. Fakat aynı işlem veri tipi ile birlikte kullanılacaksa parantez de kullanılmalıdır: "sizeof(veritipi)"

sizeof işleminin çıktısı C'nin typedef kütüphanesinde tanımladığı size_t tipindedir.


, İşlemi

Virgül birden fazla ifadeyi beraber uygulamak için kullanılır. Örnek:

#include <stdio.h>

int main(void){
    int a,b;
    a=(b=2,b+4);
    printf("%d\t",a);
    printf("%d",b);
    return 0;
}

Yukarıdaki örnekte çıktı şudur:

6        2

Önce "a=b=2" ifadesi sonra da "a=b+4" ifadesi uygulanmıştır.


. ve -> İşlemleri

Bu iki işlem yapı ve birliklerin tekil elemanlarıyla çalışırken kullanılır. "." işlemi doğrudan elemanla, "->" işlemi de işaretçiyle çalışırken kullanılmaktadır. Yapı ve birliğin ne olduğunu çok daha ileride işleyeceğiz.


( ) ve [ ] İşlemleri

( ) işlemi işlemlerde öncelik sağlamak için kullanılır. [ ] işlemi ise dizilerle alakalı bir işlemdir. Dizileri de ileriki kısımlarda işleyeceğiz.




Bit İşlemleri <<<<< Temel C >>>>> Tip Dönüşümü