걍 가끔 눈팅중인 나그네인데
지금
프로그래밍 중인데 허접좀 도와주라..
예를들어
int val;
scanf("%d" , &val);
int arr[val] = 0;
이런식으로 하면 배열 인덱스 쪽에서 컴파일 에러 발생하는데
이유가 뭔지 아는사람있음!?
걍 가끔 눈팅중인 나그네인데
지금
프로그래밍 중인데 허접좀 도와주라..
예를들어
int val;
scanf("%d" , &val);
int arr[val] = 0;
이런식으로 하면 배열 인덱스 쪽에서 컴파일 에러 발생하는데
이유가 뭔지 아는사람있음!?
동적할당 해서 배열 만드는 게 아니라 저런 식으로 스택에 초기화 해서 만드는 것이면 변수로 배열 사이즈를 지정해줄 수 없다. 그 이유는 스택 공간은 층층이 쌓이는 구조이기 때문에 힙과는 다르게 런타임 도중에 동적으로 할당할 수 없기 때문이다.
http://dsnight.tistory.com/50
그래서 val을 받은 다음에 int &arr; = (int*)malloc(sizeof(int)*val); 이런식으로 힙에다가 동적 할당해주면 val 사이즈만큼 런타임에 배열을 만들 수 있는 거다.
그리고 arr배열을 val로 님처럼 만들 수 있다 해도 int arr[val] = 0; 이거는 초기화 문법을 잘 모르고 쓰는 것이다. int arr[5] = { 0, }; 이거면 모를까
이야~ 정확한지적 고맙다ㅋㅋㅋㅋc언어 놓은지 꽤 되서 까묵까묵 ㅜㅜ 링크에 있는거 잘보께 쌩유
우왕 adsf형님 멋지다
알까기//되서->돼서
정적 메모리 할당(본문 코드)은 컴파일 타임에 그 크기가 결정되어야 함. 애초에 정적 메모리 할당은 런타임 이전에 미리 다 메모리(스택이라는 곳에) 할당 하고 실행을 시작하거든. 원하는 코드로 짤려면 구글에 '동적 할당' 검색해봐. 수두룩하게 나옴.
처음에 int arr[100] = { 0 } 값할당되어있으면 참조가능하지않나요? 변수크게잡으시고 0으로초기화 하시면 ㅎㅎ
#define MAX_INDEX 9999; int arr[MAX_INDEX]={ 0 }; int index_pointer=0; scanf("%d",&index;_pointer); arr[index_pointer]=1; 이상한가요 ㅋㅋ
표준은 되지 않냐????? c99이상은 될텐데??? gcc로 컴파일 했을 시 가변배열도 생성되는데.... VS에서 하면 안되지....VS는 C최신 표준 지원 예정도 없고.. 사실 c++ c#때문에 쓰는 IDE지