스칼라 형식 초기화
때 초기화 하는 스칼라 형식의 경우 값의 할당 식 변수에 할당 됩니다.할당에 대 한 변환 규칙을 적용합니다.(참조 하십시오 형식 변환 변환 규칙에 대 한 내용은.)
구문
declaration:
선언 지정자 init 선언 자 목록 선택**;**선언 지정자:
저장소 클래스 지정자 선언 지정자 선택형식 지정 자가 선언 지정자 선택
형식 한정자 선언 지정자 선택
init 선언 자 목록:
초기화를 선언 자init 선언 자 목록 , init 선언 자
초기화를 선언 자:
선언 자선언 자 = 이니셜라이저 / * 스칼라 초기화 * /
이니셜라이저:
대입 식
다음 규칙을 준수 해야 하는 경우에 모든 형식의 변수를 초기화할 수 있습니다.
파일 범위 수준에서 선언 된 변수를 초기화할 수 있습니다.외부 수준에서 변수를 명시적으로 초기화 하지 않는 경우는 기본적으로 0으로 초기화 됩니다.
선언 된 전역 변수를 초기화 하려면 상수 식을 사용할 수 있는 정적저장소 클래스 지정자. 선언에 변수 정적 프로그램이 실행 될 때 초기화 됩니다.명시적으로 전역 초기화 하지 않는 경우 정적 변수는 기본적으로 초기화 됩니다 및 포인터 형식의 모든 멤버는 null 포인터 할당 됩니다.
로 선언 된 변수는 자동 또는 등록 저장소 클래스 지정자를 실행 제어 블록을 지날 때마다 초기화 되는 선언 된.이니셜라이저 선언에서 생략할 경우는 자동 또는 등록 변수는 변수의 초기 값 정의 되지 않습니다.자동에 대 한 이니셜라이저를 레지스터 값 상수; 하는 제한 된 수 없습니다 것도 함수 호출 이전에 정의 된 값과 관련 된 모든 식 수 있습니다.
초기 값 외부 변수를 선언 하 고 모든 정적 변수를 외부 또는 내부에 있어야 상수 식입니다.(자세한 내용은 상수 식입니다.) 모든 외부에서 선언 된 또는 정적 변수의 주소를 일정 하 게 유지 되므로 내부적으로 선언 된 초기화에 사용 되는 수 있습니다 정적 포인터 변수입니다.그러나 주소는 자동 블록의 각 실행에 대해 서로 다른 수 있기 때문에 변수는 정적 이니셜라이저를 사용할 수 없습니다.값은 상수 또는 변수를 사용 하 여 초기화할 수 자동 및 등록 변수입니다.
외부 링크의 식별자가 식별자 선언 블록 범위를 가지 않으면 초기화 선언을 사용할 수 없습니다.
예제
다음 예제에서는 초기화를 보여 줍니다.
int x = 10;
정수 변수 x 상수 식으로 초기화 됩니다 10.
register int *px = 0;
포인터 px "null" 포인터를 생성, 초기화 됩니다.
const int c = (3 * 1024);
상수 식은이 예제를 사용 하 여 (3 * 1024) 초기화 합니다 c 때문에 수정할 수 없는 상수 값은 const 키워드.
int *b = &x;
이 문은 포인터 초기화 b 또 다른 변수의 주소를 x.
int *const a = &z;
포인터 a 라는 변수는 주소와 초기화 됩니다 z.그러나 이후이 지정 하는 const, 변수 a , 수정 초기화만 할 수 있습니다.항상 같은 위치를 가리키는.
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 */
}
전역 변수 GLOBAL 외부 수준에서 선언 되므로 전역 수명이 있습니다.로컬 변수 LOCAL 가 자동 저장소 클래스 에서만 선언 된 함수를 실행 하는 동안 주소를 갖습니다.따라서 초기화 하는 중에 정적 포인터 변수 lp 의 주소 LOCAL 사용할 수는 없습니다.해당 정적 포인터 변수 gp 주소를 초기화할 수 있습니다 GLOBAL 그 주소가 항상 동일 하기 때문입니다.마찬가지로, *rp 때문에 초기화할 수 있습니다 rp 로컬 변수 이며 비상수 이니셜라이저를 가질 수 있습니다.블록 입력 될 때마다 LOCAL 할당 되는 새 주소를가지고 rp.