포인터에 쓰는 함수를 사용하는 것이 올바른 방법입니까? 함수를 호출하기 전에 double*
에 메모리를 할당해야합니까?포인터를 초기화하는 올바른 방법입니까?
double *myDouble;
write_to_pointer(myDouble);
포인터에 쓰는 함수를 사용하는 것이 올바른 방법입니까? 함수를 호출하기 전에 double*
에 메모리를 할당해야합니까?포인터를 초기화하는 올바른 방법입니까?
double *myDouble;
write_to_pointer(myDouble);
포인터는 다양한 방식으로 데이터를 가리킬 수 있습니다.
다음은 힙에 단일 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;
포인터 자체 또는 포인터가 가리키는 메모리에 쓰는 것을 의미합니까?
는 제, 그리고 그것이 예를 들면, 참조 포인터 걸리는 경우
void write_to_pointer(double *& p) {
p = whatever;
}
다음 그것이 올바른지 오히려 혼란 않는다. 그래서 역 참조를 시도, 포인터는 아무것도 가리하지 않습니다
double *get_pointer() {return whatever;}
double *myDouble = get_pointer();
가 더 다음 두 번째,없는 경우 : 할당이 더 분명되도록, 반환 값으로 값을 반환하는 것이 좋습니다 것 (일반적으로 다른 프로그램 메모리를 손상 시키거나 손상시키는) 정의되지 않은 동작을 제공합니다. 유효한 double
(또는 함수가 예상하는 경우 double
의 충분히 큰 배열)을 가리켜 야합니다.
죄송합니다. 나는 후자를 의미했습니다. 내가 새로운 것을 사용하여 어딘가를 가리 키도록해야합니까? 이런 식으로해도 괜찮습니까? 'double myDouble [3] = {0,0,0}'? (3 요소 더블 배열을위한 공간이 필요하다면) – Anna
@Anna 네, 어떤 배열을 가리키는 것이 좋습니다. 다른 이유로 동적 할당을 필요로하지 않는 한'new'를 사용할 필요가 없습니다. –
이것은 포인터에 쓰는 잘못된 방법입니다. 어느 귀하의 변수에 메모리를 할당 :
double *myDouble = new double;
write_to_pointer(&myDouble);
delete myDouble;
을이 경우 선언에
또는
스택에 변수를 선언 write_to_pointer (더블 **)입니다 :이에
double myDouble;
write_to_pointer(&myDouble);
case 선언은 write_to_pointer가 될 것입니다 (double *)
메모리를 "할당"합니다. 포인터가 쓸 수있는'double' 객체를 포인터가 가리키는 지 확인해야합니다. – juanchopanza
@juanchopanza 내 예제에서는 그렇지 않다고 생각하니? – Anna
맞아요, 포인터가 아무데도 좋은 지적하지 않습니다. 참조 해제하려고하면 * 정의되지 않은 동작이 *됩니다. – juanchopanza