도저히 모르겠습니다..(배열포인터 관련..)
딥블루
질문 제목 : 배열 포인터 관련 문제인데 도저히 못풀겠습니다..1) size가 5인 두 배열을 동적으로 할당받고 두 배열의 값(value)를 swap하는 프로그램을 작성하시오.
2) size가 5인 두 배열을 동적으로 할당받고 두 배열의 참조(reference)를 swap하는 프로그램을 작성하시오.질문 내용 : 학교서 자료구조배우는데 c언어 배열과 포인터 동적할당을 리뷰하면서 했을땐 분명 쉬운문제들이었는데.. 질문요약에 있는 두 예제는 도저히 모르겠습니다...
결과값은첫번째 것은
두번째 것은
이런식으로 나와야 합니다.. 제가 첫번째 일단 한것 소스는
#includestdio.h
#includestdlib.h
void swap_value(int *arr1, int *arr2); //swap 함수 선언
void main(){
int arr1[5]={1,2,3,4,5}; // 배열 a 선언
int arr2[5]={11,12,13,14,15}; //배열 b 선언
int *parr1; // 배열 a의 포인터 선언
int *parr2; // 배열 b의 포인터 선언
parr1 = (int *)malloc(sizeof(int)*5); //사이즈가 5인 배열a의 동적메모리할당
parr2 = (int *)malloc(sizeof(int)*5); //사이즈가 5인 배열b의 동적메모리할당
printf(swap 전 배열 a가 참조하는 주소 %p\n, arr1);
printf(swap 전 배열 b가 참조하는 주소 %p\n, arr2);
printf(swap 전 배열 a의 값 : %d, %d, %d, %d, %d\n, arr1[0], arr1[1], arr1[2], arr1[3], arr1[4]);
printf(swap 전 배열 b의 값 : %d, %d, %d, %d, %d\n, arr2[0], arr2[1], arr2[2], arr2[3], arr2[4]);
printf(\n);
swap_value(arr1, arr2); //두 배열의 값(value)를 swap하는 함수 실행
printf(swap 전 배열 a가 참조하는 주소 %p\n, arr1);
printf(swap 전 배열 b가 참조하는 주소 %p\n, arr2);
printf(swap 후 배열 a의 값 : %d, %d, %d, %d, %d\n, arr1[0], arr1[1], arr1[2], arr1[3], arr1[4]);
printf(swap 후 배열 b의 값 : %d, %d, %d, %d, %d\n, arr2[0], arr2[1], arr2[2], arr2[3], arr2[4]);
printf(\n);
free(parr1); //배열a의 동적메모리 해제
free(parr2); //배열b의 동적메모리 해제
}
void swap_value(int *arr1, int *arr2){
int temp=0; //temp함수 생성
for(int i=0;i5;i++){ // 배열 a와 배열 b의 value값을 변경
temp=arr1[i];
arr1[i]=arr2[i];
arr2[i]=temp;
}
}
여기까지 했습니다. 보이는건 똑같이 나오는데 두번째(reference)를 사용하면서 할때는 도저히 감이 안잡힙니다. 배열을 통째로 바꾸는건데 주소값까지 같이 바꾸는거여서.... 부탁좀 드립니다.
-
돌심보
arr이 배열이어서 넘길때 배열의 주소값을 가지고서 넘어가는걸로 알고있습니다.
고로 &는 안붙여도 되는걸로 압니다.. -
화이트
주소를 넘겨야 되니까요
-
화이티
안되네요. 직접해보세요 되는지...ㅜㅜ 제가 알기론 배열넘길땐 &안붙이는걸로 알아서요..
-
뽀야
네 전부다 원래대로 하고여
-
세움
배열넘길땐 &안붙이지않나요? 문자열이엇나..급헷갈리네요..
-
눈
swap(&arr1,&arr2)해보세여
-
별하
그거 이미 해봤어요.. 그것도 안되요..
-
너만을
아뇨 temp = &arr[i] arr[i]=&arr[j] arr[i]=&temp로 해보심이... 틀렸다면 죄송ㅋ 저도 초보에여ㄷㄷ
-
하람
스왑부분이요..? 자세히좀 설명해주실수 있나요..? 잘이해가 안되서요.. void &swap_value 이렇게 하시라는 뜻인지..
-
차오름
주소를 통째로 바꿔야 한다면 &를 붙이면 될거같은데... 스왑하는 부분에여