C Programlama

C dilinde sizeof operatörü

C dilinde sizeof operatörü
Bu yazıda, C'deki sizeof operatörünü öğreneceğiz. İşlenenin boyutunu bulmamıza yardımcı olan, gömülü yazılım geliştirmede yaygın olarak kullanılan bir tekli operatördür. Bu nedenle, sizeof operatörünün dönüş değeri, belirli bir değişkeni veya veri türünü tutmak için bilgisayar belleğinde ayrılan bayt sayısını anlamamıza yardımcı olur.

Sizeof'u Anlamak:

Operatör boyutu tartışmasına girmeden önce, operatörün anlamını anlayalım. Operatör, toplama, çıkarma, çarpma, bölme vb. gibi bir işlemi gerçekleştirmek için kullanılan bir simge veya sembol ile temsil edilir. değerler veya değişkenler üzerine (İşlenenler). Örneğin, “*” çarpma işlemini temsil etmek için kullanılan semboldür ve iki işlenen üzerinde çalışır (sonuç = a * b ;). Bu bir ikili operatör örneğidir.

Bununla birlikte, bir operatör yalnızca bir işlenen üzerinde çalışıyorsa, böyle bir operatöre birli operatör diyoruz. Sizeof operatörü, C programlama dilinde bulunan tekli operatörlerden biridir ve görünüşe göre sadece bir işlenen üzerinde çalışır. sizeof operatörü, işlenenin boyutunu döndürür. Bu, Sizeof operatörünün dönüş değerinden, belirli işleneni bilgisayar belleğinde tutmak için kaç bayt tahsis edildiğini açıkça söyleyebiliriz.

Bir bilgisayarın belleği, bir bellek birimleri topluluğudur (i.e. bayt). Sizeof (int) belirli bir bilgisayar sisteminde dört döndürdüğünde, bir tamsayı değişkeninin değerini o belirli bilgisayar sisteminin belleğinde tutmak için 4 bayt aldığını söyleyebiliriz. Ayrıca, sizeof operatörünün dönüş değerinin de kullandığınız makinelere (32-bit sistem veya 64-bit sistem) bağlı olduğunu lütfen unutmayın.

Sözdizimi:

Boyut(tür)
Sizeof(ifade)

sizeof'un dönüş türü size_t'dir.

Örnekler:

Şimdi sizeof operatörünü anladığımıza ve sözdizimini bildiğimize göre, kavramı daha iyi anlamamıza yardımcı olacak birkaç örneğe bakalım.

Yerleşik türler için sizeof (örnek1.c):

Bu programda sizeof operatörünün int, char, float, double gibi yerleşik veri türleri için nasıl çalıştığını göreceğiz. Programa ve çıktıya bakalım.

#Dahil etmek
int ana()

printf("Karakterin boyutu = %ld \n", sizeof(char));
printf("Boyut int = %ld \n", sizeof(int));
printf("şamandıranın boyutu = %ld \n", sizeof(kayan nokta));
printf("çiftin boyutu = %ld \n\n", sizeof(double));
printf("Kısa boyutun boyutu int = %ld \n", sizeof(short int));
printf("Boyut uzun int = %ld \n", sizeof(uzun int));
printf("uzun uzun int boyutu = %ld \n", sizeof(uzun uzun int));
printf("Uzun ikilinin boyutu = %ld \n", sizeof(uzun ikili));
0 döndür;

Dizi için Sizeof (örnek2.c)

Bu programda, sizeof operatörünün farklı dizi türleri için nasıl kullanılacağını göreceğiz. Bir dizi olması durumunda, sizeof operatörü dönecektir (Hayır. dizideki elemanların sayısı * Sizeof (dizi tipi)). Örneğin, 10 elemanlı bir tamsayı tipi dizi (int SmartPhones [10] ;) bildirdiğimizde, sizeof(Smartphones) şunu döndürür:

(Hayır. Akıllı Telefonlardaki öğelerin sayısı * sizeof(int)) = (10 * 4) = 40

Programa ve çıktıya bakalım.

#Dahil etmek
int ana()

int Akıllı Telefonlar[10];
char Akıllı Telefon İsimleri[10];
çift ​​Akıllı TelefonFiyat[10];
printf("Boyut int = %ld \n", sizeof(int));
printf("Karakterin boyutu = %ld \n", sizeof(char));
printf("çiftin boyutu = %ld \n", sizeof(double));
/* Dizinin boyutunu öğrenin*/
printf("Akıllı Telefonların Boyutu[10] = %ld \n", sizeof(Akıllı Telefonlar));
printf("SmartPhoneNames'in Boyutu[10] = %ld \n", sizeof(SmartPhoneNames));
printf("SmartPhonesPrice Boyutu[10] = %ld \n", sizeof(SmartPhonesPrice));
0 döndür;

Kullanıcı tanımlı türler için sizeof(örnek3.c):

Bu örnekte, yapı ve birleşim gibi kullanıcı tanımlı veri türleri için sizeof operatörünün nasıl kullanılacağını göreceğiz. Programı kullanalım ve çıktıyı anlayalım.

Şimdi programa baktığımızda SmartPhoneType'ın boyutunu manuel olarak hesaplayabiliriz. Aşağıda görebileceğiniz gibi SmartPhoneType bir yapıdır ve aşağıdaki öğeleri içerir:

  • Karakter tipi değişken sayısı = 1 [sp_name]
  • Tamsayı türü değişken sayısı= 1 [sp_version]
  • Float tipi değişken sayısı= 3 [sp_length, sp_width, sp_height]

Örnek-1'den şunu gördük:

    • Karakterin boyutu 1 bayttır
    • Bir tamsayının boyutu 4 bayttır
    • Bir şamandıranın boyutu 4 bayttır

Bu nedenle, yapıdaki tüm elemanların boyutlarını toplarsak yapının boyutunu elde edebilmeliyiz, i.e. Akıllı TelefonTürü. Bu nedenle yapının boyutu = (1 + 4 + 4 + 4 + 4) bayt = 17 bayt olmalıdır. Ancak program çıktısı yapı boyutunun 20 olduğunu söylüyor. Yapı dolgusu nedeniyle yapıya ayrılan ekstra 3 bayt (bir karakter olan sp_name 1 bayt yerine 4 bayt alıyor).

#Dahil etmek
/* Kullanıcı tanımlı bir yapı türü oluştur - SmartPhoneType*/
struct SmartPhoneType

char sp_name;
int sp_versiyonu;
float sp_length;
float sp_width;
float sp_height;
Akıllı Telefon;
/* Kullanıcı tanımlı bir birleşim türü tanımlayın - SmartPhoneUnionType*/
Union SmartPhoneUnionType

char sp_name;
int sp_versiyonu;
float sp_length;
float sp_width;
float sp_height;
SmartPhone_u;
int ana()

/* Yapının ve birleşimin boyutunu öğrenin*/
printf("Yapı boyutu = %ld \n", sizeof(Akıllı Telefon));
printf("Birleşim boyutu = %ld \n", sizeof(SmartPhone_u));
0 döndür;

Değişkenler için sizeof (örnek4.c):

Bu örnek program, sizeof operatörünün değişkeni de kabul edebildiğini ve değişkenin boyutunu döndürebildiğini gösterir.

#Dahil etmek
int ana()

/* char, int, float ve double tip değişken ve dizi bildir */
char var_a, var_b[20];
int var_c, var_d[20];
float var_e, var_f[20];
double var_g, var_h[20];
/* Değişkenlerin ve dizinin boyutunu bulun.
Bu program, değişkenin aynı zamanda
operatörün boyutu işleneni olarak kullanılabilir*/
/* char, char değişkeni ve char dizisinin boyutu*/
printf("Karakterin boyutu = %ld \n", sizeof(char));
printf("var_a boyutu = %ld \n", sizeof(var_a));
printf("boyut var_b[20] = %ld \n\n", sizeof(var_b));
/* int, int değişkeni ve int dizisinin boyutu*/
printf("Boyut int = %ld \n", sizeof(int));
printf("var_c boyutu = %ld \n", sizeof(var_c));
printf("var_d boyutu[20] = %ld \n\n", sizeof(var_d));
/* şamandıra, şamandıra değişkeni ve şamandıra dizisinin boyutu*/
printf("şamandıranın boyutu = %ld \n", sizeof(kayan nokta));
printf("var_e'nin boyutu = %ld \n", sizeof(var_e));
printf("var_f[20]'nin boyutu = %ld \n\n", sizeof(var_f));
/* double, double değişken ve double dizinin boyutu*/
printf("çiftin boyutu = %ld \n", sizeof(double));
printf("var_g boyutu = %ld \n", sizeof(var_g));
printf("var_h boyutu[20] = %ld \n", sizeof(var_h));
0 döndür;

ifade için sizeof(örnek5.c):

Bu örnek programda, sizeof operatörünün bir ifadeyi kabul edebileceğini ve elde edilen ifadenin boyutunu döndürebileceğini göstereceğiz.

#Dahil etmek
int ana()

int var_a = 5, var_b = 3;
çift ​​var_c = 2.5, var_d = 4.5;
printf("Boyut int = %ld \n", sizeof(int));
printf("çiftin boyutu = %ld \n\n", sizeof(double));
printf("var_a * var_b = %ld \n", sizeof(var_a * var_b));
printf("var_c * var_d = %ld \n", sizeof(var_c * var_d));
/* Burada bir tamsayı değişkenini bir çift değişkenle çarpıyoruz.
Bu nedenle, sizeof operatörü, maksimum boyutun boyutunu döndürür
değişken i.e. çift ​​tip değişken.*/
printf("var_a * var_c = %ld \n", sizeof(var_a * var_c));
0 döndür;

sizeof'un pratik kullanımı (örnek6.c):

Bu örnek program sizeof operatörünün pratik kullanım durumunu anlamanıza yardımcı olacaktır. Sizeof operatörü, malloc kullanarak yığından dinamik belleği ayırırken çok kullanışlıdır. Programa ve çıktıya bakalım.

#Dahil etmek
#Dahil etmek
typedef yapısı

char sp_name;
int sp_versiyonu;
float sp_length;
float sp_width;
float sp_height;
Akıllı TelefonTürü;
int ana()

/* Beş SmartPhoneType tutmak için Yığın bellekte bellek ayırın
değişkenler.
*/
SmartPhoneType * SmartPhone_Ptr = (SmartPhoneType *)malloc(5 * sizeof(SmartPhoneType));
if(SmartPhone_Ptr != BOŞ)

printf("5 SmartPhoneType yapı değişkeni için ayrılan bellek
yığın bellek.\n");

Başka

printf("Yığın bellek tahsisi sırasında hata oluştu!");

0 döndür;

Sonuç:

Sizeof, C programlama dilinde önemli bir tekli operatördür. İlkel veri türlerinin, kullanıcı tanımlı veri türlerinin, ifadelerin vb. boyutunu belirlememize yardımcı olur. bilgisayar belleğinde. Sizeof operatörü, malloc, calloc, vb. kullanarak C'de dinamik bellek ayırmada önemli bir rol oynar. yığın hafızasında.

Daha Önce Bir Linux Sürümü Olmayan Linux için HD Remastered Oyunlar
Birçok oyun geliştiricisi ve yayıncısı, franchise'ın ömrünü uzatmak için eski oyunların HD remaster'ı ile geliyor, lütfen modern donanımla uyumluluk i...
Linux Oyunlarını Otomatikleştirmek için AutoKey Nasıl Kullanılır?
AutoKey, Linux ve X11 için Python 3, GTK ve Qt'de programlanmış bir masaüstü otomasyon aracıdır. Komut dosyası oluşturma ve MAKRO işlevselliğini kulla...
How to Show FPS Counter in Linux Games
Linux gaming got a major push when Valve announced Linux support for Steam client and their games in 2012. Since then, many AAA and indie games have m...