Sdílet prostřednictvím


Inicializace skalárních typů

Při inicializaci skalárních typů je hodnota výrazu-přiřazení přiřazena proměnné.Použijí se pravidla převodu při přiřazení. (Další informace o pravidlech převodu naleznete v tématu Převody typů.)

Syntax

  • declaration:
    specifikátory-deklarace seznam-deklarátorů-inicializace volitelné**;**

  • specifikátory-deklarace:
    specifikátor-třídy-úložiště specifikátory-deklarace volitelné

    specifikátor-typu specifikátory-deklarace volitelné

    kvalifikátor-typu specifikátory deklarace volitelné

  • seznam-deklarátorů-inicializace:
    deklarátor-inicializace

    seznam-deklarátorů-inicializace , deklarátor-inicializace

  • deklarátor-inicializace:
    declarator

    deklarátor = inicializátor /* pro skalární inicializaci */

  • inicializátor:
    výraz-přiřazení

Lze inicializovat proměnné libovolného typu za předpokladu, že vyhovují následujícím pravidlům:

  • Proměnné deklarované na úrovni rozsahu souboru mohou být inicializovány.Pokud proměnnou explicitně neinicializujete na vnější úrovni, je ve výchozím nastavení inicializována na hodnotu 0.

  • Konstantní výraz slouží k inicializaci jakékoli globální proměnné deklarované pomocí static specifikátor-paměťové-třídy.Proměnné deklarované jako static jsou inicializovány, jakmile začne provádění programu.Pokud není globální statická proměnná inicializována explicitně, je ve výchozím nastavení inicializována na hodnotu 0 a každý člen typu ukazatele je inicializován na hodnotu null.

  • Proměnné deklarované pomocí specifikátoru paměťové třídy auto nebo register jsou inicializovány pokaždé, když řízení provádění přejde do bloku, ve kterém jsou deklarovány.Pokud z deklarace proměnné auto nebo register vynecháte inicializátor, je počáteční hodnota proměnné nedefinována.Pro automatické hodnoty a hodnoty registru není inicializátor omezen na konstantu, může to být libovolný výraz zahrnující předem definované hodnoty i volání funkce.

  • Počáteční hodnoty externích deklarací proměnných a všech statických proměnných, vnějších nebo vnitřních, musí být konstantní výrazy. (Další informace naleznete v tématu Konstantní výrazy.) Protože je adresa všech externě deklarovaných nebo statických proměnných konstantní, lze ji použít k inicializaci interně deklarovaného statického ukazatele.Nicméně adresu proměnné auto nelze použít jako statický inicializátor, protože může být různá při každém spuštění bloku.Proměnné nebo konstantní hodnoty slouží k inicializaci proměnných auto a register.

  • Pokud má deklarace identifikátoru rozsah bloku a tento identifikátor má externí propojení, nemůže tato deklarace mít inicializaci.

Příklady

Následující příklady ilustrují inicializace:

int x = 10; 

Celočíselná proměnná x je inicializována konstantním výrazem 10.

register int *px = 0;

Ukazatel px je inicializován na hodnotu 0, čímž se stane ukazatelem „null“.

const int c = (3 * 1024);

Tento příklad používá konstantní výraz (3 * 1024) k inicializaci proměnné c na konstantní hodnotu, kterou nelze změnit, protože je použito klíčové slovo const.

int *b = &x;

Tento příkaz inicializuje ukazatele b adresou jiné proměnné x.

int *const a = &z;

Ukazatel a je inicializován adresou proměnné s názvem z.Avšak protože je deklarován jako const, může být proměnná a pouze inicializována a už nikdy změněna.Vždy odkazuje na stejné místo.

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   */
}

Globální proměnná GLOBAL je deklarována na vnější úrovni, takže má globální životnost.Lokální proměnná LOCAL je typu paměťové třídy auto a obsahuje adresu pouze během provádění funkce, ve které je deklarována.Proto pokus o inicializaci statické proměnné ukazatele lp adresou proměnné LOCAL není povolen.Statická proměnná ukazatele gp může být inicializována adresou proměnné GLOBAL, protože je tato adresa vždy stejná.Podobně může být inicializován ukazatel *rp, protože rp je místní proměnná a může mít nekonstantní inicializátor.Při každém vstupu do tohoto bloku, má proměnná LOCAL novou adresu, která je poté přiřazena do proměnné rp.

Viz také

Koncepty

Inicializace