레포트 숙제중에 질문드립니다

s_jeho의 이미지

학교 레포트 중에 이해가 안되는것이 있어 질문드립니다-

배열로 만들어진 프로그램을 포인터로 변환하라는 숙제인데

나름대로 한번 변화시켜봤습니다만 이렇게 쉬울리가 없다는

판단하에(;;;;) 여기에 질문을 올립니다..

조건은 꼭 필요한 배열을 제외한 가능한 포인터로만

구성되어야 합니다-

원문소스와 변환된 소스를 올립니다...

원문소스
#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] 이렇게 배열식으로 하라는게 아니라
포인터 연산으로만 처리하라는 말씀이실까나요..?

lifthrasiir의 이미지

배열 선언만 배열 형태로 하고 나머지를 포인터 연산만으로 고치라는 게 아닐까 싶은데... 예를 들어서 다음과 같은 식이겠죠.

   for(cnt=0;cnt<size;cnt++)
      if(prc[cnt]%2==1)  // 2로 나누어 1이 나오면 홀수판정
         printf("%d\n",prc[cnt]);

이걸,
   for(cnt=0;cnt<size;cnt++,prc++)
      if(*prc%2==1)  // 2로 나누어 1이 나오면 홀수판정
         printf("%d\n",*prc);

이런 식으로 바꾸는 게 아닐까 싶습니다. (scanf도 비슷하게 바꿀 수 있겠습니다)

- 토끼군

s_jeho의 이미지

감사합니다~ 레포트도 어느길로 나아가야할지 대충 감도 잡혔고
무엇보다 포인터개념에 대해서 약간이나마 알수있게되었네요
감사합니다^_^

moonzoo의 이미지

tokigun wrote:
배열 선언만 배열 형태로 하고 나머지를 포인터 연산만으로 고치라는 게 아닐까 싶은데... 예를 들어서 다음과 같은 식이겠죠.

   for(cnt=0;cnt<size;cnt++)
      if(prc[cnt]%2==1)  // 2로 나누어 1이 나오면 홀수판정
         printf("%d\n",prc[cnt]);

이걸,
   for(cnt=0;cnt<size;cnt++,prc++)
      if(*prc%2==1)  // 2로 나누어 1이 나오면 홀수판정
         printf("%d\n",*prc);

이런 식으로 바꾸는 게 아닐까 싶습니다. (scanf도 비슷하게 바꿀 수 있겠습니다)

- 토끼군

제 생각은 약간 다릅니다.

배열을 포인터 연산으로 대체하라는 것은

로직 자체에 변경을 가하라는 뜻은 아닌것 같습니다.

prc[cnt]는 => *(prc + cnt) 바꾸고.

scanf부분에 &inp[cnt]는 => ( int + cnt ) 로 바꾸는

것이 적당할 것 같습니다.

chadr의 이미지

음.. 제 생각으로는 정적배열로 된걸 동적 메모리 할당으로 바꾸라는 의미로 생각이 되네요..

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.