2013-10-05 1 views
1

이중 포인터 메서드를 사용하여 C++로 2 차원 배열을 만들려고합니다. 나는 변수를 초기화 할 때 나는 항상 배열이 먼저 나는이 시도에서 크기 8. 것을 얻을 :포인터를 사용하여 C++ 배열 초기화, 크기 8

double** sobel_x; 

을 그리고 8로 크기를 가지고, 다음 나는이 시도 할 때 :

double** sobel_x; 
    sobel_x = new int*[3]; 
    for(int i = 0; i < sizeof(sobel_x); i++) { 
    sobel_x[i] = new int[3]; 
    } 

누군가가 배열이 크기 8로 초기화 된 이유와 그 크기를 변경하는 방법을 먼저 설명 할 수 있습니까?

는 는
+2

'new int' ->'new double'? – P0W

+0

크기는 어떻게 확인하나요? 배열의 크기가 아닌 포인터의 크기를 볼 수 있습니다. 포인터 만 저장하면 버려집니다. –

+0

@ P0W 감사합니다! 나는 심지어 그 일을 알지도 못했다 – azrosen92

답변

4

이 코드는 :

은 는 는
double** sobel_x = new int*[3]; 
std::cout << sizeof(sobel_x); 
는 는 는

는 항상 sizeof가 (이 경우 double**이다 유형에 따라) 컴파일 시간에 평가 때문에 sizeof포인터를 인쇄합니다 관계없이 할당 한 내용을 런타임에이 포인터에. 대신

사용 std::vector : 당신은 크기를 검색 할 수있을 것입니다 경우에도

std::vector< std::vector<double> > sobel_x(3, std::vector<double>(3, 0.0)); 
std::cout << sobel_x.size(); 

참고 크기 바이트에있을 것입니다. 그것은 당신에게 요소의 수를주지 않을 것입니다. 당신은 sobel_x에 sizeof 연산자를 호출하고

double sobel_x[3][3] = { 0.0 }; 
std::cout << sizeof(sobel_x);       // <-- outputs 72 
std::cout << sizeof(sobel_x[0]);      // <-- outputs 24 
std::cout << sizeof(sobel_x)/sizeof(sobel_x[0]); // <-- outputs 3 
+0

배열을 가지고 이것을 할 수있는 방법이 있습니까? – azrosen92

+0

@ azrosen92 : 지금 내 대답을 확인하십시오 :) – LihO

+0

흠, 알았어, 내 두 번째 문제가 다음 날 가져온 것 같아요, 내가 입력으로 임의의 배열 크기를 취하도록 설계된 다른 함수에서이 배열을 사용하려고합니다. 그리고 C++에서 void FunctionName (double [] [] array) 함수를 선언 할 수 없다는 것을 알았습니다. void FunctionName (double ** array)을 사용해야합니다. 그래서'FunctionName'에서 작동 할 배열을 만드는 방법이 있습니까? – azrosen92

1

및 sobel_x는 포인터입니다 : 배열이를 위해, 당신은 자동 저장 기간과 정적 배열을 사용할 수 있습니다. 이것은 8이 시스템의 포인터 크기 (아마도 64 비트 시스템)임을 의미합니다. C++: getting the row size of a multidimensional array passed to a function

당신은 런타임에 길이를 계산 벡터와 같은 STL 클래스 중 하나를 사용해야하는 경우 :

이 포스팅은 당신이 원하는 일을 할 수 없음을 설명합니다.

간단한 사용 사례로 sobel_x (이 경우 3 개)가 가리키는 배열의 요소 수를 이미 알고 있으므로 루프의 테스트 조건으로 사용하십시오.