|
매일 하나씩 답변을 달려구 노력하는 레조입니다;;
몇일전에 본 글인데 이제 답글을 쓰네요 ^^;;
: void change_it(int a[])
: {
: int i=777, *q=&i;
: a=q;
: }
일단 위의 change_it 함수로 포인터를 넘겨서 새로운 주소를(어떤의도에서든..--;)
받아오고 테스트를 하고싶은것 같은데...
change_it에 한가지 문제가 있네요.
인자로 들어오는 포인터 변수는 문제가 없겠지만 그 변수에 바꾸려는 주소를 대입할때
change_it 내부의 변수 어드레스를 사용했습니다.
이는 change_it 함수가 끝났을때 그 주소는 유효하지 않기때문에 주소를 바꾸었다고
볼수 없겠지요...(기록은 남아 있을듯 하지만...)
포인터 변수를 인자로 넘긴후에 내부에서 새로운 값으로 할당할때는 new를 사용해보세요.
수정해 보자면...
void change_it( int* a )
{
a = new int;
*a = 777;
}
이렇게 해놓으면 main에서 별문제 없이 사용할수 있겠지요.. 그리고 delete 하시는것 잊지
마시고.. ^^
그럼 change_it 말고 다른걸 살펴볼까요?
(가장 흔한 스왑(상호바꾸기) 함수입니다.)
[참고]
참조란? 같은변수의 또 다른 이름이다.
참조가 포인터보다 좋은점은 해제할 필요가 없기 때문에 표기법이 더 단순하고
컴파일러가 참조의 초기화를 강요하므로 골치아픈 포인터 실수를 범할 우려가
적다.
한편, 참조는 포인터보다 더 사용하기 쉽고 더 안전하지만 더 강력하지는 않다.
#include <stdio.h>
#include <conio.h>
void swap( int&, int& ); // 선언
int main()
{
int a, b;
a = 5;
b = 10;
printf( "\na = %d b = %d", a, b );
swap(a, b); // 사용
printf( "\na = %d b = %d", a, b );
getch();
return 0;
}
void swap( int& a, int& b ) // 정의
{
int temp;
temp = a;
a = b;
b = temp;
}
메인의 변수를 함수 내부에서 값을 바꾼다.
이는 메인에서도 바꾼 내용이 적용된다.
오제호 님이 쓰신 글 :
: 아래 프로그램은 change_it함수에서 a의 어드레스를 바꿔서
: main으로 전달하려 하는데
: 어떻게 전달해야 하는지좀 알려주세요.
:
: 가장 기본적인건데 잘 모르겠어요
:
: #include <stdio.h>
:
: void change_it(int a[]);
:
: int main()
: {
: int a[5]={0,1,2,3,4}, *p;
:
: p=a;
: printf("p[1]=%d p=%p\n",p[1],p);
:
: change_it(a);
: p=a;
:
: printf("*p=%d p=%p\n",*p,p);
: return 0;
: }
:
: void change_it(int a[])
: {
: int i=777, *q=&i;
: a=q;
: }
|