레포트 숙제중에 질문드립니다
글쓴이: s_jeho / 작성시간: 월, 2005/10/24 - 2:44오후
학교 레포트 중에 이해가 안되는것이 있어 질문드립니다-
배열로 만들어진 프로그램을 포인터로 변환하라는 숙제인데
나름대로 한번 변화시켜봤습니다만 이렇게 쉬울리가 없다는
판단하에(;;;;) 여기에 질문을 올립니다..
조건은 꼭 필요한 배열을 제외한 가능한 포인터로만
구성되어야 합니다-
원문소스와 변환된 소스를 올립니다...
원문소스 #include <stdio.h> void odd(int*,int); void even(int*,int); void main() { int inp[10]; int cnt=0; printf("10개의 숫자를 입력하세요\n\n"); for(cnt=0;cnt<10;cnt++) { printf("%d/10 : ",cnt+1); scanf("%d",&inp[cnt]); //10개 입력받음 } odd(inp, sizeof(inp)/sizeof(int)); //배열의 주소와 배열요소의 갯수를 even(inp,sizeof(inp)/sizeof(int)); // 인자로 하여 odd와 even 함수로 넘긴다 printf("\n"); } void odd(int *prc,int size) { int cnt; printf("홀수\n"); printf("------------\n"); for(cnt=0;cnt<size;cnt++) if(prc[cnt]%2==1) // 2로 나누어 1이 나오면 홀수판정 printf("%d\n",prc[cnt]); } void even(int *prc,int size) { int cnt; printf("\n\n짝수\n"); printf("------------\n"); for(cnt=0;cnt<size;cnt++) if(prc[cnt]%2==0) // 2로 나누어 0이 되면 판정 printf("%d\n",prc[cnt]); } 포인터로 변환된 소스 #include <stdio.h> void odd(int *,int); void even(int *,int); void main() { int inp[10]; int cnt=0; int *p_inp; printf("10개의 숫자를 입력하세요\n\n"); p_inp=inp; for(cnt=0;cnt<10;cnt++) { printf("%d/10 : ",cnt+1); scanf("%d",&p_inp[cnt]); //10개 입력받음 } odd(p_inp, sizeof(inp)/sizeof(int)); //배열의 주소와 배열요소의 갯수를 even(p_inp,sizeof(inp)/sizeof(int)); // 인자로 하여 odd와 even 함수로 넘긴다 printf("\n"); } void odd(int *prc,int size) { int cnt; printf("홀수\n"); printf("------------\n"); for(cnt=0;cnt<size;cnt++) if(prc[cnt]%2==1) // 2로 나누어 1이 나오면 홀수판정 printf("%d\n",prc[cnt]); } void even(int *prc,int size) { int cnt; printf("\n\n짝수\n"); printf("------------\n"); for(cnt=0;cnt<size;cnt++) if(prc[cnt]%2==0) // 2로 나누어 0이 되면 판정 printf("%d\n",prc[cnt]); }
....네 눈가리고 아웅했습니다..ㅠ_ㅠ
포인터에 대한 개념이 아직 잘 안잡혀서 이리저리 해메게
되는군요-
배열을 최대한 배제한 포인터 사용이라니..
제가 알기론 포인터는 자료형을 가진 주소값이라고 알고있는데
주소값자체에 값을 집어넣을수도 없고 일단 포인터 연산을
통해 배열 비슷하게 할수있는것으로 알지만 그것도 역시
배열을 일단 지정해준뒤에 포인터에 대입해야하는것이
아닙니까?
제가 알고있는것과 지금의 예제가 무언가 틀린점이 있다면
지적부탁드립니다..
혹시 교수님이 원하시는게 중간에 scanf로 받을때
&포인터[cnt] 이렇게 배열식으로 하라는게 아니라
포인터 연산으로만 처리하라는 말씀이실까나요..?
Forums:
배열 선언만 배열 형태로 하고 나머지를 포인터 연산만으로 고치라는 게 아
배열 선언만 배열 형태로 하고 나머지를 포인터 연산만으로 고치라는 게 아닐까 싶은데... 예를 들어서 다음과 같은 식이겠죠.
이걸,
이런 식으로 바꾸는 게 아닐까 싶습니다. (scanf도 비슷하게 바꿀 수 있겠습니다)
- 토끼군
아 감사합니다..^_^
감사합니다~ 레포트도 어느길로 나아가야할지 대충 감도 잡혔고
무엇보다 포인터개념에 대해서 약간이나마 알수있게되었네요
감사합니다^_^
[quote="tokigun"]배열 선언만 배열 형태로 하고 나머지를 포
제 생각은 약간 다릅니다.
배열을 포인터 연산으로 대체하라는 것은
로직 자체에 변경을 가하라는 뜻은 아닌것 같습니다.
prc[cnt]는 => *(prc + cnt) 바꾸고.
scanf부분에 &inp[cnt]는 => ( int + cnt ) 로 바꾸는
것이 적당할 것 같습니다.
음.. 제 생각으로는 정적배열로 된걸 동적 메모리 할당으로 바꾸라는 의미
음.. 제 생각으로는 정적배열로 된걸 동적 메모리 할당으로 바꾸라는 의미로 생각이 되네요..
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기