Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Při inicializaci skalárních assignment-expression typů je hodnota proměnné přiřazena. Platí pravidla převodu pro přiřazení. (Informace o pravidlech převodu najdete v tématu Převody typů .)
Syntaxe
declaration:
declaration-specifiers
init-declarator-list
volit;
declaration-specifiers:
storage-class-specifier
declaration-specifiers
volit
type-specifier
declaration-specifiers
volit
type-qualifier
declaration-specifiers
volit
init-declarator-list:
init-declarator
init-declarator-list
,
init-declarator
init-declarator:
declarator
declarator
=
initializer /* Pro skalární inicializaci */
initializer:
assignment-expression
Proměnné libovolného typu můžete inicializovat, pokud dodržujete následující pravidla:
Proměnné deklarované na úrovni oboru souboru lze inicializovat. Pokud proměnnou explicitně neinicializujete na externí úrovni, inicializuje se ve výchozím nastavení na hodnotu 0.
Konstantní výraz lze použít k inicializaci jakékoli globální proměnné deklarované pomocí
staticstorage-class-specifier. Proměnné deklarované jakostaticinicializované při spuštění programu. Pokud globálnístaticproměnnou explicitně inicializujete, inicializuje se ve výchozím nastavení na hodnotu 0 a každému členu, který má typ ukazatele, je přiřazen ukazatel null.Proměnné deklarované specifikátorem
autotřídyregisterúložiště se inicializují při každém průchodu ovládacího prvku provádění do bloku, ve kterém jsou deklarovány. Pokud z deklaraceautoproměnnéregistervynecháte inicializátor, počáteční hodnota proměnné není definována. U automatických a registrovaných hodnot není inicializátor omezen na konstantu; může to být libovolný výraz zahrnující dříve definované hodnoty, dokonce volání funkce.Počáteční hodnoty pro deklarace externích proměnných a pro všechny
staticproměnné, ať už externí nebo interní, musí být konstantní výrazy. Další informace naleznete v tématu Konstantní výrazy. Vzhledem k tomu, že adresa jakékoli externě deklarované nebo statické proměnné je konstantní, lze ji použít k inicializaci interně deklarovanéstaticproměnné ukazatele. Adresuautoproměnné ale nejde použít jako statický inicializátor, protože se může lišit pro každé spuštění bloku. K inicializaciautoaregisterproměnných můžete použít hodnoty konstanty nebo proměnné.Pokud má deklarace identifikátoru obor bloku a identifikátor má externí propojení, deklarace nemůže inicializovat.
Příklady
Následující příklady ilustrují inicializace:
int x = 10;
Celočíselná proměnná x se inicializuje na konstantní výraz 10.
register int *px = 0;
Ukazatel px se inicializuje na hodnotu 0 a vytvoří ukazatel null.
const int c = (3 * 1024);
Tento příklad používá konstantní výraz (3 * 1024) k inicializaci c na konstantní hodnotu, kterou nelze upravit kvůli klíčovému slovu const .
int *b = &x;
Tento příkaz inicializuje ukazatel b s adresou jiné proměnné, x.
int *const a = &z;
a Ukazatel se inicializuje s adresou proměnné s názvem z. Vzhledem k tomu, že je zadaná jako proměnná const , lze proměnnou ainicializovat pouze, nikdy ji neupravovat. Vždy odkazuje na stejné umístění.
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 externí úrovni, takže má globální životnost. Místní proměnná LOCAL má auto třídu úložiště a má adresu pouze během provádění funkce, ve které je deklarována. Proto pokus o inicializaci static proměnné lp ukazatele s adresou LOCAL není povolen. Proměnnou staticgp ukazatele lze inicializovat na adresu GLOBAL , protože tato adresa je vždy stejná. Podobně lze inicializovat, *rp protože rp je místní proměnná a může mít nekontinuálně inicializátor. Pokaždé, když je blok zadán, LOCAL má novou adresu, která se pak přiřadí rp.