C Programlama Veri Tipleri

C programlama veri tipleri, değişkenleri veya farklı türlerdeki işlevleri bildirmek için kullanılan kapsamlı bir sistemi ifade eder. Bir değişkenin türü, depolamada ne kadar yer kapladığını ve depolanan bit modelinin nasıl yorumlanacağını belirler.

C’deki veri türler aşağıdaki gibi sınıflandırılabilir:

Sr.No.Türler ve Açıklama
1Temel Türler
Aritmetik türlerdir ve ayrıca şu şekilde sınıflandırılırlar: (a) tamsayı türleri(integer types) ve (b) kayan nokta türleri(floating-point types).
2Numaralandırılmış Türler
Yine aritmetik türlerdir ve program boyunca sadece belirli ayrık tamsayı değerleri atayabilen değişkenleri tanımlamak için kullanılırlar.
3Hükümsüz(void) Türler
Tür belirteci void , kullanılabilir değer olmadığını gösterir.
4Türetilmiş Türler
Bunlar (a) Pointer(İşaretçi türleri), (b) Array(Dizi türleri), (c) Struct(Yapı türleri), (d) (Union)Birleştirme türleri ve (e) Function(İşlev türleri) olarak sınıflandırılır.

Dizi türleri ve yapı türleri toplu olarak toplu türler olarak adlandırılır. Bir işlevin türü, işlevin dönüş değerinin türünü belirtir. Temel türleri aşağıdaki bölümde göreceğiz, diğer türler de sonraki bölümlerde kullanılmaya ihtiyaç duyulduğunda ele alınacaktır.

Tamsayı Türleri

Aşağıdaki tablo, depolama boyutları ve değer aralıklarıyla birlikte standart tamsayı türlerinin ayrıntılarını sağlar:

TipDepolama BoyutuDeğer Aralığı
char1 bayt-128 ile 127 ya da 0 ile 255
unsigned char1 bayt0ile 255
signed char1 bayt-128ile 127
int2ya da 4 bayt-32,768ile 32,767ya da -2,147,483,648ile 2,147,483,647
unsigned int2ya da 4 bayt0 to 65,535ya da 0ile 4,294,967,295
short2 bayt-32,768ile 32,767
unsigned short2 bayt0ile 65,535
long8 bayt veya
(32 bit işletim sistemi için 4 bayt)
-9223372036854775808ile 9223372036854775807
unsigned long8 bayt0ile 18446744073709551615

Belirli bir sistemde bir türün veya değişkenin tam boyutunu elde etmek için sizeof operatörünü kullanabilirsiniz. sizeof(type) ifadeleri, nesnenin depolama boyutunu veya bayt cinsinden türünü verir. Aşağıda, limits.h başlık dosyasında tanımlanan farklı sabitleri kullanan bir makinede çeşitli türlerin boyutunu elde etmek için kullanılan bir önişlemci türüdür.

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>

int main(int argc, char** argv) {

    printf("CHAR_BIT    :   %d\n", CHAR_BIT);
    printf("CHAR_MAX    :   %d\n", CHAR_MAX);
    printf("CHAR_MIN    :   %d\n", CHAR_MIN);
    printf("INT_MAX     :   %d\n", INT_MAX);
    printf("INT_MIN     :   %d\n", INT_MIN);
    printf("LONG_MAX    :   %ld\n", (long) LONG_MAX);
    printf("LONG_MIN    :   %ld\n", (long) LONG_MIN);
    printf("SCHAR_MAX   :   %d\n", SCHAR_MAX);
    printf("SCHAR_MIN   :   %d\n", SCHAR_MIN);
    printf("SHRT_MAX    :   %d\n", SHRT_MAX);
    printf("SHRT_MIN    :   %d\n", SHRT_MIN);
    printf("UCHAR_MAX   :   %d\n", UCHAR_MAX);
    printf("UINT_MAX    :   %u\n", (unsigned int) UINT_MAX);
    printf("ULONG_MAX   :   %lu\n", (unsigned long) ULONG_MAX);
    printf("USHRT_MAX   :   %d\n", (unsigned short) USHRT_MAX);

    return 0;
}

Yukarıdaki programı derleyip çalıştırdığınızda, MacOS’ta aşağıdaki sonucu üretir:

CHAR_BIT    :   8
CHAR_MAX    :   127
CHAR_MIN    :   -128
INT_MAX     :   2147483647
INT_MIN     :   -2147483648
LONG_MAX    :   9223372036854775807
LONG_MIN    :   -9223372036854775808
SCHAR_MAX   :   127
SCHAR_MIN   :   -128
SHRT_MAX    :   32767
SHRT_MIN    :   -32768
UCHAR_MAX   :   255
UINT_MAX    :   4294967295
ULONG_MAX   :   18446744073709551615
USHRT_MAX   :   65535

Kayan Nokta Türleri(Floating-Point Types)

Aşağıdaki tablo, depolama boyutları ve değer aralıkları ile standart kayan nokta türlerinin ayrıntılarını ve bunların kesinliğini sağlar:

TipDepolama BoyutuDeğer AralığıKesinlik
float4 bayt1.2E-38 ile 3.4E+386 ondalık basamak
double8 bayt2.3E-308 ile 1.7E+30815 ondalık basamak
long double10 bayt3.4E-4932 ile 1.1E+493219 ondalık basamak

Float.h başlık dosyası, bu değerleri ve gerçek sayıların programlarınızda ikili gösterimi hakkındaki diğer ayrıntıları kullanmanıza izin veren verileri tanımlar. Aşağıdaki örnek, bir kayan nokta türü tarafından alınan depolama alanını ve aralık değerlerini yazdırır:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>

int main(int argc, char** argv) {

    printf("Storage size for float : %d \n", sizeof(float));
    printf("FLT_MAX     :   %g\n", (float) FLT_MAX);
    printf("FLT_MIN     :   %g\n", (float) FLT_MIN);
    printf("-FLT_MAX    :   %g\n", (float) -FLT_MAX);
    printf("-FLT_MIN    :   %g\n", (float) -FLT_MIN);
    printf("DBL_MAX     :   %g\n", (double) DBL_MAX);
    printf("DBL_MIN     :   %g\n", (double) DBL_MIN);
    printf("-DBL_MAX     :  %g\n", (double) -DBL_MAX);
    printf("Precision value: %d\n", FLT_DIG );

    return 0;
}

Yukarıdaki programı derleyip çalıştırdığınızda, MacOS’ta aşağıdaki sonucu üretir:

Storage size for float : 4 
FLT_MAX      :   3.40282e+38
FLT_MIN      :   1.17549e-38
-FLT_MAX     :   -3.40282e+38
-FLT_MIN     :   -1.17549e-38
DBL_MAX      :   1.79769e+308
DBL_MIN      :   2.22507e-308
-DBL_MAX     :  -1.79769e+308
Precision value: 6

Hükümsüz(void) Tipi

void türü, kullanılabilir bir değer olmadığını belirtir. Üç tür durumda kullanılır:

Sr.No.Türler ve Açıklama
1İşlev geçersiz olarak döndürmek
C’de herhangi bir değer döndürmeyen çeşitli işlevler vardır veya bunların void döndürdüğünü söyleyebilirsiniz. Dönüş değeri olmayan bir işlev, dönüş türüne void olarak sahiptir.
Örneğin, void exit (int status);
2void olarak işlev argümanları
C’de herhangi bir parametre kabul etmeyen çeşitli fonksiyonlar vardır. Parametresi olmayan bir fonksiyon bir boşluğu kabul edebilir.
Örneğin, int rand(void);
3Geçersiz kılmak için işaretçiler
void * türündeki bir işaretçi, bir nesnenin adresini temsil eder, ancak türünü temsil etmez. 
Örneğin, bir bellek ayırma işlevi void *malloc( size_t size ); herhangi bir veri türüne dönüştürülebilen geçersiz bir işaretçi döndürür.

Format Belirteçleri

Format belirteçleri, giriş ve çıkış amaçları için C’de kullanılır. Bu kavramı kullanarak derleyici, scanf() işlevini kullanarak girdi alırken ve printf() işlevini kullanarak yazdırırken bir değişkende ne tür verilerin olduğunu anlayabilir.

Format BelirteciTip
%cCharacter
%dSigned integer
%e or %EScientific notation of floats
%fFloat values
%g or %GSimilar as %e or %E
%hiSigned integer (short)
%huUnsigned Integer (short)
%iUnsigned integer
%l veya %ldveya %liLong
%lfDouble
%LfLong double
%luUnsigned int or unsigned long
%lliveya %lldLong long
%lluUnsigned long long
%oOctal representation
%pPointer
%sString
%uUnsigned int
%xveya %XHexadecimal representation
%nPrints nothing
%%Prints % character