int main()
{
int a;
int test_array_0[a]; //(1) 오류!
int a = 4;
int test_array[a]; //(2) 오류!
int test_array_2[4]; //(3) 정상!
}
스택 영역 : 프로그램이 실행되기 전, 컴파일 타임에서 사용하는 공간 (정적 할당)
힙 영역 : 할당해야할 메모리의 크기를 프로그램이 런타임을 하는 동안 결정해야한다면 사용하게 되는 공간 (동적 할당)
int test_array_2[4] 라는 변수는 배열이며, 이는 해당 배열의 첫 시작주소 (배열이 가리키는 포인터를 의미)를 가리키고 있습니다. 이 시작주소는 스택에 저장이 되지만 그 안의 정보들은 힙 영역에 저장됩니다.
int a = 4; 의 코드는 런타임때 실행이 되어 4라는 값이 a에 초기화가 되므로
int test_array[a]; 라는 배열은 결국 첫 시작주소를 가리키기위한 스택에 저장이 되어야하며 컴파일 단계에서 실행이 됨을 의미합니다.
따라서 이 코드는 오류를 발생시킵니다.
'C,C++ > 공부 낙서' 카테고리의 다른 글
공부하면서 빠트린 것들 끄적끄적 - 시프트 연산 (0) | 2022.11.22 |
---|---|
공부하면서 빠트린 것들 끄적끄적 - 람다 (0) | 2022.11.21 |
공부하면서 빠트린 것들 끄적끄적 - 연산자 (0) | 2022.11.18 |
공부하면서 빠트린 것들 끄적끄적 - 템플릿, 타입ID (0) | 2022.11.16 |
공부하면서 빠트린 것들 끄적끄적 - 가상함수, 형변환 (0) | 2022.11.15 |