Aracılığıyla paylaş


Skaler Türleri Başlatma

Skaler türleri başlatırken değeri assignment-expression değişkenine atanır. Atama için dönüştürme kuralları geçerlidir. (Dönüştürme kuralları hakkında bilgi için bkz . Tür Dönüştürmeleri .)

Sözdizimi

declaration:
declaration-specifiers init-declarator-list Tercih;

declaration-specifiers:
storage-class-specifier declaration-specifiers Tercih
type-specifier declaration-specifiers Tercih
type-qualifier declaration-specifiers Tercih

init-declarator-list:
init-declarator
init-declarator-list , init-declarator

init-declarator:
declarator
declarator = initializer /* Skaler başlatma */ için

initializer:
assignment-expression

Aşağıdaki kurallara uyduğun sürece herhangi bir türdeki değişkenleri başlatabilirsiniz:

  • Dosya kapsamı düzeyinde bildirilen değişkenler başlatılabilir. Bir değişkeni dış düzeyde açıkça başlatmazsanız, varsayılan olarak 0 olarak başlatılır.

  • ile bildirilen staticstorage-class-specifierherhangi bir genel değişkeni başlatmak için bir sabit ifade kullanılabilir. Program yürütme başladığında, olduğu static bildirilen değişkenler başlatılır. Bir genel static değişkeni açıkça başlatmazsanız, varsayılan olarak 0 olarak başlatılır ve işaretçi türüne sahip her üyeye null işaretçi atanır.

  • veya register depolama sınıfı tanımlayıcısı auto ile bildirilen değişkenler, yürütme denetimi bildirildiği bloğa her geçtiğinde başlatılır. Bir başlatıcıyı veya register değişkeninin auto bildiriminden atlarsanız, değişkenin ilk değeri tanımlanmamış olur. Otomatik ve kayıt değerleri için başlatıcı sabit olmakla sınırlı değildir; daha önce tanımlanmış değerleri, hatta işlev çağrılarını içeren herhangi bir ifade olabilir.

  • Dış değişken bildirimlerinin ve static dış veya iç tüm değişkenlerin ilk değerleri sabit ifadeler olmalıdır. Daha fazla bilgi için bkz. Sabit İfadeler. Dış olarak bildirilen veya statik değişkenlerin adresi sabit olduğundan, dahili olarak bildirilen static bir işaretçi değişkenini başlatmak için kullanılabilir. Ancak, bloğun auto her yürütmesi için farklı olabileceğinden bir değişkenin adresi statik başlatıcı olarak kullanılamaz. ve register değişkenlerini başlatmak auto için sabit veya değişken değerleri kullanabilirsiniz.

  • Bir tanımlayıcı bildiriminin blok kapsamı varsa ve tanımlayıcı dış bağlantısı varsa, bildirimin başlatması olamaz.

Örnekler

Aşağıdaki örneklerde başlatmalar gösterilmektedir:

int x = 10;

Tamsayı değişkeni x sabit ifadesine 10başlatılır.

register int *px = 0;

İşaretçi px 0 olarak başlatılır ve bir "null" işaretçisi oluşturulur.

const int c = (3 * 1024);

Bu örnekte, anahtar sözcük nedeniyle const değiştirilemedi sabit bir değere başlatmak c için bir sabit ifade (3 * 1024) kullanılır.

int *b = &x;

Bu deyim, işaretçiyi b başka bir değişkenin adresiyle başlatır. x

int *const a = &z;

İşaretçi a adlı zdeğişkenin adresiyle başlatılır. Ancak, olarak belirtildiğinden constdeğişkeni a yalnızca başlatılabilir, hiçbir zaman değiştirilemez. Her zaman aynı konuma işaret eder.

int GLOBAL ;

int function( void )
{
    int LOCAL ;
    static int *lp = &LOCAL;   /* Illegal initialization */
    static int *gp = &GLOBAL;  /* Legal initialization   */
    register int *rp = &LOCAL; /* Legal initialization   */
}

Genel değişken GLOBAL dış düzeyde bildirildiğinden genel kullanım ömrüne sahiptir. Yerel değişkenin LOCAL depolama sınıfı vardır auto ve yalnızca bildirildiği işlevin yürütülmesi sırasında bir adresi vardır. Bu nedenle, işaretçi değişkenini staticlp adresiyle LOCAL başlatma girişimine izin verilmez. İşaretçi static değişkeni gp , adresi GLOBAL her zaman aynı olduğundan adresine başlatılabilir. Benzer şekilde, *rp yerel bir değişken olduğundan ve sabit olmayan bir başlatıcıya sahip olabileceği için rp başlatılabilir. Blok her girildiğinde yeni LOCAL bir adrese sahip olur ve bu adrese rpatanır.

Ayrıca bakınız

Başlatma