Statik değişken, normal değişken, global değişken ve uçucu değişken arasındaki fark nedir?


cevap 1:

Statik değişkenler

Statik bir değişken, farklı işlev çağrıları arasındaki değerini koruyabilir. Statik değişken yalnızca bir kez başlatılır, başlatılmazsa otomatik olarak 0'a başlatılır. Statik değişken nasıl bildirilir.

Sözdizimi: statik tür var_name;

#Dahil etmek void func_1 (); int a, b = 10; int main () {func_1 (); func_1 (); func_1 (); // işletim sistemine sinyal her şey iyi çalışıyor 0; } void func_1 () {int a = 1; statik int b = 100; printf ("a =% d \ n", a); printf ("b =% d \ n \ n", b); a ++; b ++; }

Beklenen çıktı:

a = 1 b = 100 a = 1 b = 101 a = 1 b = 102

Func_1 () öğesinde, b değişkeni statik olarak bildirilir. Func_1 () ilk kez b 100 olarak başlatıldığında, satır 22'de b değeri artırılır. Bu yeni b değeri, func_1 () tekrar çağrıldığında korunur. Func_1 () ikinci kez çağrıldığında, b değişkeni 101, satır 20 olan değerini korudu, b değerini yazdırarak bunu kanıtlar ve bir kez daha b değeri 1 artar. Benzer şekilde, üçüncü kez func_ () çağrılır, b değeri 102'dir. b değişkeni statik olarak bildirildiğinden yalnızca b değişkeninin değerini koruyabildiğine dikkat edin. () denir. Ayrıca, statik değişken b'nin func_1 () ilk kez çağrıldığında yalnızca bir kez başlatıldığını unutmayın.

Global Değişkenler

Herhangi bir fonksiyonun dışında bildirilen değişkenlere global değişkenler denir. Herhangi bir işlevle sınırlı değildir. Herhangi bir işlev global değişkenlere erişebilir ve bunları değiştirebilir. Global değişkenler, bildirim sırasında otomatik olarak 0 olarak başlatılır. Global değişkenler genellikle main () fonksiyonundan önce yazılır.

#Dahil etmek void func_1 (); void func_2 (); int a, b = 10; // genel değişkenleri bildirme ve başlatma int main () {printf ("Global a =% d \ n", a); printf ("Genel b =% d \ n \ n", b); func_1 (); func_2 (); // işletim sistemi programına sinyal ince dönüş 0 koştu; } void func_1 () {printf ("func_1 () 'den Global a =% d \ n", a); printf ("func_1 () 'den Global b =% d \ n \ n", b); } void func_2 () {int a = 5; printf ("İç func_2 () a =% d \ n", a); }

Beklenen çıktı:

Global a = 0 Global b = 10 func_1 () öğesinden Global a = 0 func_1 () öğesinden Global b = 10 func_2 () öğesinden a = 5

4. satırda, a ve b, int türünde iki genel değişken olarak bildirilir. A değişkeni otomatik olarak 0 olarak başlatılır. Herhangi bir fonksiyonun içinde a ve b değişkenlerini kullanabilirsiniz. Func_2 () işlevi içinde, global değişkenle aynı ada sahip yerel bir değişken olduğuna dikkat edin. Global değişken ve yerel değişken arasında bir çakışma olduğunda, yerel değişken öncelik kazanır, bu nedenle a'nın func_2 () yerel değeri içinde yazdırılır.

Yerel değişkenlerden farklı olarak, işlev sona erdiğinde global değişkenler yok olmaz. Program yürütülene kadar herhangi bir işlev için kullanılabilirler.

Uçucu Değişkenler

Bir değişken uçucu bildirmek için değişken tanımına veri türünden önce veya sonra uçucu anahtar sözcüğünü ekleyin. Örneğin, bu bildirimlerin her ikisi de foo'nun uçucu bir tamsayı olduğunu bildirir:

uçucu int foo; int uçucu foo;

Şimdi, değişken belleklere yönelik işaretçilerin, özellikle bellek eşlemeli G / Ç kayıtlarında çok yaygın olduğu ortaya çıkıyor. Bu bildirimlerin her ikisi de pReg'i geçici bir imzasız 8 bit tamsayıya işaretçi olarak bildirir:

uçucu uint8_t * pReg; uint8_t uçucu * pReg;

Uçucu olmayan verilere yönelik uçucu işaretçiler çok nadirdir (Sanırım bunları bir kez kullandım), ama devam edip sentaksını versen iyi olur:

int * uçucu p;

Ve sadece bütünlük için, eğer gerçekten değişken bir değişken için uçucu bir işaretçiniz varsa, şunu yazarsınız:

int uçucu * uçucu p;

Bu arada, neden uçucu yerleştireceğinize dair bir seçiminiz olduğuna ve bunu neden veri türünden (örneğin, uçucu * foo) sonra yerleştirmeniz gerektiğine dair harika bir açıklama için Dan Sak'ın "İşlevdeki Üst Düzey CV-Niteleyiciler" sütununu okuyun. Parametreler "(Gömülü Sistem Programlama, Şubat 2000, s. 63).

Son olarak, bir yapıya veya birliğe geçici olarak uygularsanız, yapı / birleşmenin tüm içeriği değişken olur. Bu davranışı istemiyorsanız, yapı / birleşimin tek tek üyelerine geçici niteleyiciyi uygulayabilirsiniz.

Teşekkürler..:)


cevap 2:

A2A için teşekkürler.

Değişken: Konumumuza verilen ve değerimizi tutabilecek bir ad değil.

  1. Statik değişken: Kapsamı dışında olsa bile değerini koruyan değişken. Bir kez başlatıldığında, tekrar başlatılmadı Düzenli değişken: Düzenli veya yerel değişken. Kapsamı bir işlevin kendisiyle sınırlıdır veya yalnızca bildirildiği bir işlevde kullanılabilir.Global değişken: Global değişken, tüm işlevlerin dışında bildirilen bir değişkendir. Kapsamı program boyunca. Bu değer diğer tüm fonksiyonlar tarafından alınabilir. Değişken Değişken: Değerleri herhangi bir zamanda geçerli kodun kapsamı dışındaki kodlarla değiştirilebilir. Uçucu anahtar kelimenin derleyicinin herhangi bir optimizasyonunu engellemesi amaçlanmıştır.