문제

C 프로그램이 시작되고 변수가 메모리 위치에 할당되면 C 표준에 해당 값이 초기화되어 있는지 말합니까?

// global variables
int a;
int b = 0;
static int c;

위의 코드에서 'B'는 0으로 초기화됩니다. 'a'의 초기 값은 얼마입니까? 이 모듈과 정적이므로 'C'가 다른가요?

도움이 되었습니까?

해결책

구체적으로 언급하기 때문에 글로벌 변수 : 글로벌 변수의 경우 선언 여부 static 그렇지 않으면, 그들은 0으로 초기화됩니다.

현지의 반면에 변수가 될 것입니다 한정되지 않은 (그들이 선언되지 않는 한 static,이 경우에도 0으로 초기화됩니다. Tyler McHenry에게 감사합니다). 번역 된 것은 특정한 것을 포함하는 그들에게 의존 할 수 없다는 것을 의미합니다. 그들은 그 위치에 이미 메모리에있는 임의의 쓰레기가 포함되어 있으며, 달리기마다 다를 수 있습니다.

다른 팁

편집하다: 다음은 글로벌이 아닌 로컬 변수에만 적용됩니다.

변수의 초기 값은 정의되지 않았습니다. 일부 언어에서는 메모리의 변수 위치는 선언시 0이지만 C (및 C ++)에서는 초기화되지 않은 변수에는 그 위치에 사는 쓰레기가 포함되어 있습니다.

따라서 그것을 생각하는 가장 좋은 방법은 초기화되지 않은 변수에 대부분 쓰레기를 포함하고 정의되지 않은 행동을 가질 가능성이 높다는 것입니다.

a 0이 될 것입니다 c 또한 그들이 글로벌이고 명시 적으로 초기화되지 않는다면. 이것은 로컬 정적 변수에도 해당됩니다.

로컬 비 정적 변수 만 초기화되지 않습니다. 또한 Malloc과 할당 된 메모리는 초기화되지 않습니다.

보다 here 다른 개체에 대한 C의 초기화 및 할당 규칙.

오늘 아침에 너무 천천히 입력하고 있습니다. 내가 대답 할 때 세 사람이 빨리 튀어 나왔기 때문에 대부분의 게시물을 제거했습니다. 내가 찾은 링크는 명확하고 짧았으므로 어쨌든 다음을 게시하고 있습니다. "비 초기 변수"에 대한 Wikipedia 기본 문제에 대한 토론을 위해.

빠른 테스트는 A와 C가 0임을 보여줍니다.

int a;
static int c;
int main() {
    printf("%d %d\n", a, c);
    return 0;
}

A (및 C)의 위치는 컴파일 시간에 결정됩니다. 즉, 그들은 스택에 올라가거나 Malloc이 반환 한 메모리 간격이 아닙니다. C 표준은 모든 경우에 0으로 초기화되었다고 생각합니다.

나는 99.9%에 대해 자신감이 있습니다 c, 98% 자신에 대한 자신감 a. 키워드 static, 글로벌 변수의 맥락에서, 실제로는 private C ++ 및 Java : Storage 위치가 아닌 가시성에 관한 것입니다.

앤드류 헤어 (Andrew Hare)가 비 초기 변수에 대해 말하는 것은 스택 또는 malloc'd 메모리에 저장된 데이터에 적용됩니다. 정적으로 저장된 변수의 경우에는 그렇지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top