상황에 맞게 딱 필요한 크기만큼 배열의 크기를 잡으려고 하시는거죠.. ?
대부분의 분들이 초보시절 부딪혔던 문제일겁니다. ㅎㅎ. 저또한. (여전히..)
이럴때에는 new 함수를 이용하여서 메모리를 할당받아야 합니다.
int *leejin ; // 어떤 주소를 기억하기 위한 변수.
leejin = new int(i) ; // int 형의 배열을 i개만큼 만들고, leejin에 그것의 첫번째 인자의 주소를 저장.
이렇게 하면 의도하시는
int leejin[i] ; <-- 에러가 나는 코드이지만, 의미전달에는 가장 적당할 듯 하여서..
를 구현하실수 있습니다.
간단하게 테스트 해보았습니다.
int i = 100 ;
int *leejin ;
int result ;
leejin = new int(i) ;
leejin[0] = 100 ;
leejin[5] = 20 ;
result = leejin[5] * leejin[0] ;
더 자세한 설명없어도, 위의 코드를 천천히 보시면 쉽게 응용(??) 가능할 거라고 생각합니다.
그리고 중간에 사용된 * 포인터와 관련된 자세한 내용은 아직은 너무 부담가지시지 마시고요..
일단 이렇게 쓰는구나.. 하시고, 차츰 배워나가시면 됩니다.
수고하십시요...
어떠한 질문이라도 부담~~없이 올리십시요.. ㅎㅎ.
김진수 님이 쓰신 글 :
: 저두 c++ 공부하고 있는데
: 위와 같은 경우는 int leejin[ 2 ]; 라고 선언 하시면 컴파일러가 컴파일 할때
: integer 값을 가지는 변수 leejin 의 필요한 메모리 할당을 해줍니다.
:
: 하지만 int leejin[ x ]; 라고 선언을 하시면 컴파일러는 메모리 할당에 실패를 해서
: 에러를 내보내는게 아닌가 싶습니다. 도대체 얼마를 할당해야 하는지 모르는 거죠.
:
: 이런 경우 c++ STL 의 벡터를 이용하시면 어떨까요. vector는 표준 <vector.h> 헤더 파일에
: 정의 되어 있는 클래스 템플릿입니다.
: 필요에 따라 자동적으로 커지거나 작아지는 컨테이너 객체라고 하는 군요..
:
: 이런 C 로 물어 보신거라면 답변이 안되겟네여
:
:
: kongbw 님이 쓰신 글 :
: : 다른게 아니구요
: :
: : 일단 풀어야 할 문제가 있어서 그걸 풀긴 풀었는데
: : 궁금한게 있어서 그럽니다
: :
: :
: : 문제는
: :
: :
: : 10진수를 입력하면 2진수를 출력하는 프로그램을 작성하시오
: :
: : 숫자를 입력하시오 >> 12
: : 2진수 : 1100
: :
: :
: : 이거든요
: :
: : 배열에 2로 나눈 수 나머지를 차례로 넣고
: : 거꾸로 출력을 시키는 겁니다
: :
: :
: :
: :
: : #include <stdio.h>
: :
: : void main()
: : {
: : int N ; // 입력할 10진 수
: : int k; // 입력할 수가 몇 번 나눠지는가 알기위한 수
: : int i = 0 ; // 10진수가 2진수로 몇자리 나오는지 저장되는 변수
: : int j ; // j는 2진수 출력에 쓰이는 반복문 초기값
: :
: :
: : printf("10진수를 입력하세요 : ") ;
: : scanf("%d", &N) ;
: :
: :
: : k = N ; // N을 직접 쓰지 못하므로 따로 k에 N을 대입 ;
: :
: : while ( k != 0 ) // 입력한 10진수가 2진수로
: : { // 몇자리가 나오는지 계산
: : k = k / 2 ;
: : i = i + 1 ;
: : }
: :
: :
: : int leejin[100] ; // 2진수를 입력할 배열 선언
: : // 이걸 쓸려고 한게 아니라
: : // 바로 밑에껄 쓸려고 했습니다
: :
: :
: : /* ********************************************************
: : int leejin[i] ; --------->>>> 바로 문제를 일으키는 부분...
: : */ ********************************************************
: :
: :
: :
: :
: :
: : k = N ; // 다시 k에 초기에 입력한 10진수를 대입하여 씀
: :
: :
: : for ( j = 0 ; j < i ; j++ )
: : {
: : leejin[j] = k % 2 ; // 배열에 2진수를 구해서 입력함, 순서는 거꾸로임.
: :
: : k = k / 2 ;
: : }
: :
: :
: :
: : printf("\n이진수 : ") ;
: :
: :
: : for (j = i-1 ; j >= 0 ; j-- )
: : {
: : printf("%d", leejin[j]) ;
: : }
: :
: : printf("\n\n\n\n") ;
: :
: :
: : }
: :
: :
: :
: :
: : 코딩도 개판이고... 주석도 개판인데... 초보려니 하고 이해해 주세요
: :
: :
: : 일단 풀긴 풀었거든요
: :
: :
: : 그런데 원래 위에 별표를 친걸로 배열 선언을 할려고 했습니다
: :
: : 2진수 자리에 꼭 알맞게 하기 위해
: :
: :
: : 배열 선언에 변수를 넣었거든요
: :
: : for 문을 쓸 때도 배열문 안에 변수를 넣어서 썼던게 생각이 나서
: :
: : 배열을 선언할 때도 충분히 쓸 수 있을 거라고 그렇게 했는데
: :
: : 왠걸?
: :
: : 컴파일 하는데 자랑스럽게도 애러가 뜨더군요
: :
: : 제가 생각하기에... 충~~분히 될 것 같았는데... 쩝...
: :
: : 그래서 할 수 없이 100개 짜리 배열을 선언해서
: :
: : 자리를 충분히 만들 수 밖에 없었습니다
: :
: :
: :
: : 원래 배열을 선언할 때 변수를 쓸 수 없는건가요?
: :
: : 제가 보기에는 써도 될 것 같은데...
: :
: :
: : 거기에 대해 좀 자세한... 이런 저런 이야기 좀 부탁 드리겠습니다
: :
: : 원래 배열 선언문 안에 변수를 쓸 수 없는지
: :
: :
: : 어떠한 큰... 치명적인 문제 때문에 그렇게 만든건지...
: :
: : 이런 저런 자세한 설명 부탁드립니다
: :
: : 제 머리로는 도저히 이해가 T_T
: :
: :
: :
: : 흐... 여기 질문란에 처음 올리는 글이내요
: :
: : 아무튼 여러 고수님들께서 백옥, 주옥 같은 지도 부탁드립니다!!!
: :
: :
: :
: :
: :
: : 뒷말 : 고수님께서 무심코 던진 실마리 하나가
: : 방황하는 왕하수한테는 굵은 동앗줄이 될 수 있습니다 T_T
|