포인터 질문입니다.
      글쓴이: sj316 / 작성시간: 일, 2003/02/16 - 1:13오후    
  
  
int main(void)
{
	char *testvar=0;
	
	cout << "testfunc() 호출 시작\n" << endl;
	testfunc(testvar);
	cout << "testfunc() 호출 끝\n" << endl;
	
	cout << "변수내용 출력 시작" << endl;
	printf("testvar 변수주소 : %p\n", testvar);
	printf("testvar 변수내용 : %s\n", testvar);
	cout << "변수내용 출력 끝\n" << endl;
	cout << "메모리 해제 시작" << endl;
	delete[] testvar;
	cout << "메모리 해제 끝" << endl;
	getchar();
	return 0;
}
void testfunc(char *var)
{
	char *tmpvar=0;
	char *pvar=0;
	pvar=(char *)var;
	cout << "testfunc() 시작" << endl;
	tmpvar=new char[sizeof(char) * 30];
	if(!tmpvar)
	{
		cout << "메모리 할당 실패" << endl;
		return;
	}
	memset(tmpvar, 0, 30);
	strcpy(tmpvar, "<<< 테스트 test >>>");
	var=(char *)tmpvar;
	
	printf("var 변수주소 : %p\n", var);
	printf("tmpvar 변수주소 : %p\n", tmpvar);
	printf("pvar 변수주소 : %p\n\n", pvar);
	printf("var 내용 : %s\n", var);
	printf("tmpvar 내용 : %s\n\n", tmpvar);
	cout << "testfunc() 끝" << endl;
}
testfunc()에서 main으로 값을 보내려고 하는데 잘 안 되네요
어떻게 하면 좋을까요?
Forums: 


[re]
void func( int *p ); int main( void ) { int *t; t = (int *)malloc( sizeof( int ) ); /* int 형의 값을 저장할 메모리 공간을 확보 */ *t = 5; /* 임의의 값을 대입 */ printf( "func() 실행 전: %d\n", *t ); func( t ); printf( "func() 실행 후: %d\n", *t ); free( t ); /* 할당된 메모리 공간을 커널에 반환 */ return 1; } void func( int *p ) { *p = 10; /* 인자로 넘어온 포인터가 가르키는 주소의 값을 변경 */ }Re: 포인터 질문입니다.
포인터가 가리키는 주소값 자체를 바꾸려면 포인터의 포인터를 넘겨주어야 합니다(참조 연산자를 써서). 포인터 자체는 그냥 주소값을 갖는 변수에 불과한지라 testfunc(ptr)한다고 ptr 자체의 값이 바뀌는 건 아니거든요.
...
main()의 testvar의 주소를 변경하려고 하는데 그게 잘 안 되네요
[re]
void func( int **p ); int main( void ) { int *t; t = (int *)malloc( sizeof( int ) ); /* int 형 값을 저장할 메모리 공간을 확보 */ *t = 5; /* 임의의 값을 대입 */ printf( "func() 실행 전: %x, %d\n", t, *t ); func( &t ); printf( "func() 실행 후: %x, %d\n", t, *t ); free( t ); return 1; } void func( int **p ) { int *temp; temp = (int *)malloc( sizeof(int) ); *temp = 10; free( *p ); *p = temp; }Re: 포인터 질문입니다.
---
http://coolengineer.com
[code:1]#include <iostream.h>#
#include <iostream.h> #include <string.h> void set(char **xx); int main(void) { char *tmp = 0; set(&tmp); cout << tmp; delete [] tmp; return 0; } void set(char **xx) { *xx = new char[30]; strcpy(*xx, "abcd"); }함수를 이용해서 포인터의 값을 변경시키려면 이중 포인터를 사용해야 할것 같네요..
만약 그냥 set(tmp); 해버리면 '0'이란 값이 넘어가겠죠??
근데 '&tmp' 하면 포인터 변수 tmp의 주소가 넘어가게 되어 set() 함수에서는 이중포인터 인수(char **xx)를 사용해서 넘어온 포인터 변수의 주소(&tmp)를 받아서 연산을 하면 main() 함수 안에 있는 포인터 변수의 값을 변경시킬 수 있겠죠.^^
===================================================
중요한건 얼마나 아느냐가 아니라 그것에 대한 열정이다.
감사합니다.
감사합니다.
댓글 달기