PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2008/07/07 21:37:34
Name NOksaNmaN
Subject 시언어 포인터 배열 질문드리겠습니다.
// test11.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
void bubblesort(int *number, int m);

void main()
{
int a=8, b=7, c=33, d=-20, e=100, f=34, g=9, h=12, i=83, j=10;
int *number[10], l, m=10;
number[0]=&a;
number[1]=&b;
number[2]=&c;
number[3]=&d;
number[4]=&e;
number[5]=&f;
number[6]=&g;
number[7]=&h;
number[8]=&i;
number[9]=&j;

bubblesort(*number, m);
for(l=0;l<10;l++)
{
  printf("정렬된 결과 number[%d] = %d\n", l, number[l]);
}
}
void bubblesort(int *number, int m)
{
  int k, temp;
  for(m=m-1; m>=0; m-=1)
  {
   for(k=0;k<m;k++)
   {
    if(number[k]>number[k+1])
    {
     temp=number[k];
     number[k]=number[k+1];
     number[k+1]=temp;
    }
   }
  }
}

===================================================
포인터를 이용하여 10개의 정수를 배열하는 프로그램을 짜야하는데요.
배열이 도저히 안돼 고수분들의 도움을 또 요청하게 되었습니다.
배열하는 부분만 조금 가르쳐 주시면 미리 감사드리겠습니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
08/07/07 22:18
수정 아이콘
정수까지 포인터로 연결할려면 고쳐야 할 부분이 좀 있습니다.

식도 복잡해 지고요.

#include <stdio.h>
#include <conio.h>

void bubblesort(int *number, int m);

void main()

int a=8, b=7, c=33, d=-20, e=100, f=34, g=9, h=12, i=83, j=10;
int number[10], l, m=10;
number[0]=a;
number[1]=b;
number[2]=c;
number[3]=d;
number[4]=e;
number[5]=f;
number[6]=g;
number[7]=h;
number[8]=i;
number[9]=j;

bubblesort(number, m);

for(l=0;l<10;l++)
{
printf("정렬된 결과 number[%d] = %d\n", l, number[l]);

}
void bubblesort(int *number, int m)

int k;
int temp;
for(m=m-1; m>=0; m--)
{
for(k=0;k<m;k++)
{
if(number[k]>number[k+1])
{
temp=number[k];
number[k]=number[k+1];
number[k+1]=temp;

}
}
}

일단 포인터를 배제하고 배열만으로 정렬해봤습니다.

아마 메모리 안의 내용까지 바꿔서 a에는 -20 b에는 7 c에는 8 이런식으로 바꿀 목적인가 본데...

효율은 좀 떨어지겠군요. 원하시는 대로 만들려면 시간이 조금 더 걸릴것 같습니다.
08/07/07 22:20
수정 아이콘
일단 원하시는대로 포인터들의 배열을 쓰실려면 버블 함수내의 temp역시 주소를 저장할 메모리 공간으로 잡아야 할 것입니다. temp를 정수로 선언하지 말고 포인터 변수로 선언해서 메모리 주소끼리 바꿔줘야 할 것입니다.
NOksaNmaN
08/07/07 22:34
수정 아이콘
EZrock님// 감사합니다..

그런데 문제가 포인터를 사용해서 해야 하는거라 ..

아 시언어 무지 어렵군요.. 저는 도저히 이해가..
아이온
08/07/07 23:00
수정 아이콘
C는 처음 배우기 이래서 그닥 좋은 언어가 아닌 듯 해요. 프로그래밍에서 사람이 되도록 미뤄두고 몰라야 할 디테일을 너무 일찍 깨닫게 강제하는 것 같아요. 일단은.. 포인터 그 자체는 별로 프로그래밍 행위 자체의 일부는 아니에요. 다만 C가 하드웨어 오리엔티드 된 부분이 많기 때문에 들어있는 것이고, 하드웨어에 관련된 기초 강좌들을 충실히 공부하시면 아시게 될 날이 올 거에요.

문제를 조금 알려드리면, 지금 *number 하게 되면 안 됩니다. number[0] 에는 a의 주소가 들어 있죠. number는 number[0]의 포인터 타입입니다. 따라서 int** 타입이죠.

그런데 *를 한 번 먹이게 되면, number[0]에 있는 값, 즉 a의 주소가 됩니다. 그게 패러미터로 들어갔어요.

그 상태에서 number[1]을 bubblesort() 안에서 사용하게 되면, 컴파일러는 number, 즉 a의 주소로부터 1만큼, 즉 1 곱하기 int size 만큼 떨어진 곳에서 4 바이트를 읽어 그걸 정수 취급하게 되는데, 이러면 흔히 쓰레기 값이 들어가게 되죠. (정확히는 스택은 아래로 자라고 배열은 위로 참조하기 때문에 main을 부른 스택 프레임의 내용들이 좌르륵 나오게 되겠지요)

패러미터를 int** 타입을 사용하세요.
08/07/08 03:29
수정 아이콘
포인터를 이용한 버전으로 바꾸어 봤습니다.
아래의 bubblesort 함수의 'int *number[]'는 아이온님 말씀대로 'int **number'로 바꾸어도 동일합니다.
단지 이쪽이 좀 더 number의 의미가 명확할거 같아서 이렇게 바꿔봤습니다. ^^

#include <stdio.h>

void bubblesort(int *number[], int m);

int main()

int a=8, b=7, c=33, d=-20, e=100, f=34, g=9, h=12, i=83, j=10;
int *number[10];
int m=10;
int l;

number[0]=&a;
number[1]=&b;
number[2]=&c;
number[3]=&d;
number[4]=&e;
number[5]=&f;
number[6]=&g;
number[7]=&h;
number[8]=&i;
number[9]=&j;

bubblesort(number, m);
for(l=0;l<10;l++)
{
printf(" number[%d] = %d\n", l, *(number[l]));


return 0;
}

void bubblesort(int *number[], int m)

int k;
int *temp;
for(m=m-1; m>=0; m-=1)
{
for(k=0;k<m;k++)
{
if( *(number[k]) > *(number[k+1]) )
{
temp = number[k];
number[k] = number[k+1];
number[k+1] = temp;

}
}
}
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
39133 친구에게 서울 구경 시켜주기!! [4] kikira2265 08/07/08 2265
39132 서울시내의 맛있는 보신탕 집 추천 부탁드립니다 [9] 프링글스4462 08/07/08 4462
39131 스타 핵 막는프로그램 같은건없나요.? [15] 타치바나2139 08/07/08 2139
39130 장기간연애에 대해 질문이요 [5] 날으는씨즈2629 08/07/08 2629
39129 임시인터넷파일 용량지정이 이상합니다. [1] 불타는눈동자5994 08/07/08 5994
39128 수능을 지금 부터 준비 할려면 어떻게 해야 될까요.. [3] 모르니~1885 08/07/08 1885
39126 김택용 vs 최인규. [2] Go_TheMarine3377 08/07/08 3377
39125 옷입는 법에대한 질문입니다 >_< [9] BF)FantA2151 08/07/08 2151
39124 안녕하세요 일본가수 앨범을 찾고 싶습니다.!!!! [2] 밀가리2157 08/07/08 2157
39123 원동기 무면허 벌금 질문드립니다.. [3] 컨트롤황제6635 08/07/08 6635
39122 정보처리기능사 정시, 상시 시험 질문입니다 [1] BK_Zju2268 08/07/08 2268
39121 라디오 추천좀해주세요~~~~~~~~~^^ [5] 대장균1838 08/07/08 1838
39120 컴고수님들 도와주세요 [2] ArtofX1626 08/07/08 1626
39119 휴대폰... Art Of Life2315 08/07/08 2315
39118 서울시청 구 청사 철거중인가요? [2] BluSkai2130 08/07/07 2130
39116 취직안 안데서 갑갑한 마음에 여쭈어 봅니다 [17] 아르키메데스2046 08/07/07 2046
39114 화상인지 탄건지 잘 판단이 안됩니다. [3] 200804632136 08/07/07 2136
39112 편의점에서.... [5] 꿀호떡a2098 08/07/07 2098
39111 현재 프로리그에서 [2] 브릿게이1525 08/07/07 1525
39110 컴퓨터 견적 봐주세요.^^ [4] silberio1528 08/07/07 1528
39109 시언어 포인터 배열 질문드리겠습니다. [5] NOksaNmaN1953 08/07/07 1953
39108 스타 유닛 목소리 들을 수 있는 곳을 찾습니다. [2] 피부암통키1953 08/07/07 1953
39107 동영상 플레이바 옮기면 소리가 나지 않습니다. 1866 08/07/07 1866
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로