게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
배열의 초기화에 대해서 질문좀(수정)
게시물ID : programmer_10308짧은주소 복사하기
작성자 : 우와우와우왕
추천 : 0
조회수 : 422회
댓글수 : 4개
등록시간 : 2015/05/21 14:21:03
include<iostream>
 
#define INTEGER 5
 
using namespace std;
 
int GetInt()
{
        int a;
        cin >> a;
        const int b=a;
 
        return b;
}
 
int main(void)
{
        int a;
        cin >> a;
 
        const int x = a;
        const int y = 5;
        const int z = GetInt();
 
        int arr1[x];
        int arr2[y];
        int arr3[z];
        int arr4[INTEGER];
 
        return 0;
}
 
 
 
에러가 뜨는곳은 회색 박스를 친 arr1과 arr3의 배열 크기 부분입니다.
 
디버그 시에 호출되는 문장은 둘다
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
error C2133: 'arr1' : unknown size
 
 
코드의 목적은
 
배열의 초기화 시에 배열 크기 부분에 여러가지 형태의 상수를 넣은후에 결과를 보는것인데요
 

우선 arr1의 x는 main내에서 정수 변수 a를 사용자로부터 값을 인력 받은후에
 
상수형 정수 변수 x에 a의 값을 저장시킨 것입니다. 그 결과 에러가 나왔구요
 
 
 

arr2의 y는 상수형 변수의 선언과 동시에 초기화 시킨것입니다. 에러가 안나옵니다.
 
 
 
 
arr3은 arr1과 비슷한데 다른 함수로 부터 입력받은후에 그 입력받은 값을
상수형 정수에 저장시키고 그 상수형 정수를 반환시킨값을 저장한것인데 마찬가지로 에러가 나옵니다.
 
 
 

arr4의 INTEGER는 #define을 이용해서 상수를 선언한 후에 사용한것인데 에러가 안나옵니다.
 
 
 
 
상수형 정수라고 할지라도 상수를 통해서 값을 받은것이느냐 변수로부터 값을 받은것이냐에 따라서

에러가 뜨냐 안뜨냐가 달라지는것 같은데....

도대체 위의 2개의 차이가 무엇인지 모르겠네요....
 
------------------------------------
 
컴파일 과정에서 오류가 발생한건 이해가 되네요.... 그러면
 
#include<iostream>
 
using namespace std;
 
int main(void)
{
        int x;
        cin >> x;
 
        char* arr = new char[x];
 
}
 
위에서 자유기억공간에 메모리를 할당할때에
 
x는 ㅅㅏ용자에게 입력받는 크기인데
 
new를 이용하여 자유기억공간에 메모리를 넣는 것은 컴파일러에 영향을 안받는 건가요??
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호