2014-06-10 3 views
0

포인터에 쓰는 함수를 사용하는 것이 올바른 방법입니까? 함수를 호출하기 전에 double*에 메모리를 할당해야합니까?포인터를 초기화하는 올바른 방법입니까?

double *myDouble; 
write_to_pointer(myDouble); 
+0

메모리를 "할당"합니다. 포인터가 쓸 수있는'double' 객체를 포인터가 가리키는 지 확인해야합니다. – juanchopanza

+0

@juanchopanza 내 예제에서는 그렇지 않다고 생각하니? – Anna

+0

맞아요, 포인터가 아무데도 좋은 지적하지 않습니다. 참조 해제하려고하면 * 정의되지 않은 동작이 *됩니다. – juanchopanza

답변

2

포인터는 다양한 방식으로 데이터를 가리킬 수 있습니다.

다음은 힙에 단일 double을 만들고 myDub이 가리킬 것입니다. 그런 다음 myDub 값을 4로 지정합니다. myDub을 삭제하고 포인터를 NULL으로 설정합니다.

double * myDub = new double; 
*myDub = 4; 
delete myDub; 
myDub = NULL; 

마찬가지로 배열을 할당 할 수 있습니다.

double * myDub = new double[123]; 
myDub[0] = 4; 
myDub[3] = 43; 
delete[] myDub; 
myDub = NULL; 

그리고 포인터가 이미 존재하는 변수를 가리킬 수 있습니다. (이 경우 delete라고하지 않습니다.)

double onStack = 4; 
double * myDub = &onStack; 
4

포인터 자체 또는 포인터가 가리키는 메모리에 쓰는 것을 의미합니까?

는 제, 그리고 그것이 예를 들면, 참조 포인터 걸리는 경우

void write_to_pointer(double *& p) { 
    p = whatever; 
} 

다음 그것이 올바른지 오히려 혼란 않는다. 그래서 역 참조를 시도, 포인터는 아무것도 가리하지 않습니다

double *get_pointer() {return whatever;} 
double *myDouble = get_pointer(); 

가 더 다음 두 번째,없는 경우 : 할당이 더 분명되도록, 반환 값으로 값을 반환하는 것이 좋습니다 것 (일반적으로 다른 프로그램 메모리를 손상 시키거나 손상시키는) 정의되지 않은 동작을 제공합니다. 유효한 double (또는 함수가 예상하는 경우 double의 충분히 큰 배열)을 가리켜 야합니다.

+0

죄송합니다. 나는 후자를 의미했습니다. 내가 새로운 것을 사용하여 어딘가를 가리 키도록해야합니까? 이런 식으로해도 괜찮습니까? 'double myDouble [3] = {0,0,0}'? (3 요소 더블 배열을위한 공간이 필요하다면) – Anna

+0

@Anna 네, 어떤 배열을 가리키는 것이 좋습니다. 다른 이유로 동적 할당을 필요로하지 않는 한'new'를 사용할 필요가 없습니다. –

1

이것은 포인터에 쓰는 잘못된 방법입니다. 어느 귀하의 변수에 메모리를 할당 :

double *myDouble = new double; 
write_to_pointer(&myDouble); 
delete myDouble; 

을이 경우 선언에

또는

스택에 변수를 선언 write_to_pointer (더블 **)입니다 :이에

double myDouble; 
write_to_pointer(&myDouble); 

case 선언은 write_to_pointer가 될 것입니다 (double *)

관련 문제