이중포인터를 사용한 함수에 대해서 질문합니다,
오나미
질문 제목 : 이중포인터를 함수에 쓰여질대 잘 이해가 안돼서 질문드리옴니다.질문 내용 :
#include stdio.h
void maxmin(int *, int, int **, int **);
int main(void)
{
int *maxptr; // 포인터변수 maxptr 선언
int *minptr; // 포인터변수 minptr 선언
int arr[5];
int i;
for(i=0; i5; i++)
{
printf(정수 입력 %d: , i+1);
scanf(%d, &arr[i]);
}
maxmin(arr, sizeof(arr)/sizeof(int), &maxptr, &minptr); // 함수호출(포인터변수 maxptr와 minptr 의 주소값을전달인자로)
printf(최대 : %d, 최소 : %d \n, *maxptr, *minptr); // 출력
return 0;
}
void maxmin(int *arr, int size, int **mxp, int **mnp) //전달인자 maxptr와 minptr의 주소값을
{ 이중포인터로 매개변수 선언
int *max, *min; //함수내의 포인터변수 max, min
int i;
max=min=&arr[0];
for(i=0; isize; i++)
{
if(*maxarr[i]) //최대값 구하는 if 문
max=&arr[i]; //최대값의 주소값을 포인트변수 max에 대입
if(*minarr[i]) //최소값 구하는 if 문
max=&arr[i]; //최소값의 주소값을 포인트변수 min에 대입
}
*mxp=max; // 이중포인터변수 mxp에max의 주소값을 대입??????
*mnp=min; // 이중포인터변수 mnp에mix의 주소값을 대입??????
}
우선적으로 빨간부분이 이해가 되지 않습니다.
분명 이중포인터는 싱글포인터의 주소값을 가리킨다고 배웠습니다.
int a;
int *b=&a;
int **c=&b;
c - b - a
제 생각에는 빨간색으로 표시된 부분을 보면 분명 이중포인터변수에 주소값을 대입해주는것 같은데...
왜 출력할때 그냥 포인터변수를 사용하는지 모르겠습니다.
또한 보면은 b - c - a 와 같이 포인터변수가 이중포인터를 가리키는것 같습니다.(모순)
이를 좀더 잘 알기위해서 이와같이 코딩을 해보았습니다.
#include stdio.h
void icrazy(int *,int **, int **);
int main(void)
{
int num[2]={10,20};
int *ap;
int *bp;
icrazy(&num, &ap, &bp);
printf(%d %d \n, *ap,*bp);
return 0;
}
void icrazy(int *n,int **a, int **b)
{
int *ga;
int *ha;
ga=&n[0];
ha=&n[1];
*a=ga;
*b=ha;
}
이러나 저러나 빨간부분이 전혀 이해되질 않습니다.
이부분에서 많이 아시는분은 도움을 주시길 바랍니다.,,
-
황소자리 2024-06-28
그래서 최대변수의 주소값이 담긴 max를 *mxp에 넣고 min를 *mnp에 넣는 것입니다.
글로 설명하려니 어렵네요.... 그림으로 하면 훨씬 이해하기 쉬우실텐데 하나하나 그려놓고 생각해보시면 됩니다. -
연체리 2024-06-28
즉 이 함수가 콜 되면 매개변수가 선언이 되어 mxp-maxptr-아직 안정해진 int max 변수
mnp-minptr-아직 안 정해진 int min변수
이 순서대로 가리키게 됩니다. 그래서 maxmin 함수에서 전달받은 배열의 변수의 주소값을 받기 위해 싱글포인터를 선언해서 최대값의 주소 최소값의 주소를 각각 담겨있게 됩니다. 그래서 메인함수에 있는 maxptr이 최대변수를 가리키게 minptr이 최소변수를 가리킬려면 그 각각 변수의 주소값이 -
해솔 2024-06-28
먼저 이중포인터는 싱글포인터를 가리키는 즉 싱글포인터의 주소값을 담을 수 있는 변수입니다. 포인터를 사용하는 이유는 그 변수 안에 있는 데이터를 조작하기 위해서인데 int 형 변수를 조작하기 위해서는 int 형 변수의 주소를 담을 수 있는 int 포인터가 필요하고 마찬가지로 int 포인터를 조작하기 위해서는 int 더블포인터가 필요합니다. int 싱글포인터를 조작한다는 것은 포인터 안에 있는 주소값을 조작할 수 있는 즉 이 포인터가 무슨 변수를 가리킬
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |
2675356 | 2진수를 10진수로 바꾸려고 하는데 막히네요.. | 풀잎 | 2024-11-17 |
2675297 | Prity 비트 발생기 | 한란 | 2024-11-16 |
2675249 | C책 좀 추천해 주세요 (2) | 딸기우유 | 2024-11-16 |
2675193 | 연습문제 17-1 질문입니다. | 한별나라 | 2024-11-15 |
2675172 | 소스점 | 아이뻐 | 2024-11-15 |
2675146 | 단순 연결 리스트인데 출력결과가 이상하게 나와요. | 찬늘봄 | 2024-11-15 |
2675123 | c언어에서 16진수의 사용에 대한 질문입니다.(정확한답만 달아주시길..) (8) | 데이비드 | 2024-11-15 |