sizeof İşleci (C)
sizeof
işleci, işlenen türünde bir nesneyi depolamak için gereken depolama miktarını bayt cinsinden verir. Bu işleç, programlarınızda makineye bağımlı veri boyutlarını belirtmekten kaçınmanıza olanak tanır.
Sözdizimi
sizeof unary-expression
sizeof ( type-name )
Açıklamalar
İşlenen, birli ifade olan bir tanımlayıcı veya tür atama ifadesidir (parantez içine alınmış bir tür tanımlayıcısı). Birli ifade bir bit alanı nesnesini, tamamlanmamış bir türü veya işlev belirleyicisini temsil edemez. Sonuç, işaretsiz bir tamsayı sabitidir. Standart üst bilgi STDDEF. H bu türü size_t olarak tanımlar.
sizeof
işlecini bir dizi tanımlayıcısına uyguladığınızda, sonuç dizi tanımlayıcısı tarafından temsil edilen işaretçinin boyutu değil, tüm dizinin boyutudur.
sizeof
işlecini bir yapıya, birleşim türü adına veya bir yapı ya da birleşim türünün tanımlayıcısına uyguladığınızda; sonuç, iç ve sondaki doldurma dahil olmak üzere, yapı veya birleşimdeki bayt sayısıdır. Bu boyut, yapı veya bellek sınırları üzerindeki birleşim üyelerini hizalamak için kullanılan iç ve sondaki doldurmayı içerebilir. Bu şekilde, sonuç tek tek üyelerin depolama gereksinimlerini toplayarak hesaplanan boyuta karşılık gelmeyebilir.
Boyutsuz bir dizi bir yapının son öğesi ise, sizeof
işleci dizi olmadan yapının boyutunu döndürür.
buffer = calloc(100, sizeof (int) );
Bu örnekte, bir sizeof
öğesinin makineler arasında değişen boyutunu, int
adlı bir çalışma zamanı işlevine yönelik bağımsız değişken olarak geçirmek için calloc
işleci kullanılmaktadır. İşlev tarafından döndürülen değer buffer
içinde depolanır.
static char *strings[] = {
"this is string one",
"this is string two",
"this is string three",
};
const int string_no = ( sizeof strings ) / ( sizeof strings[0] );
Bu örnekte strings
, bir char
işaretçileri dizisidir. İşaretçilerin sayısı dizideki öğelerin sayısıdır, ancak belirtilmemiştir. Dizideki öğelerin sayısını hesaplamak üzere sizeof
işlecini kullanarak işaretçilerin sayısını belirlemek kolaydır. Tamsayı const
değeri string_no
bu sayıya başlatılır. Bu bir const
değer olduğundan değiştirilemez string_no
.