2015-01-15 4 views
1

배열 x에서 해당 참조를 사용하여 배열 a 또는 b의 요소를 계산하려고합니다.다른 배열의 포인터를 통해 배열의 요소를 계산하십시오.

int a[]={1,2,3,4,5}; 
int b[]={0,2,4,5}; 

int* x[]={a,b}; 

//These work as expected 
int count_elements_a= sizeof(a)/sizeof(int); // returns 5 
int count_elements_b= sizeof(b)/sizeof(int); // returns 4 
int count_elements_x= sizeof(*x)/sizeof(int); // returns 2 

내가 아무 문제 X를 통해 배열 A의 최종 위치의 값을 얻을 수 있습니다 : 지금까지 내가 무엇을 가지고

int a2 = x[0][2]; // returns 3 

을하지만 지금, 나는의 요소를 계산하려면, X를 통해 그것을 알아낼 수 없습니다

//Count elements of a, via x. Should return 5. 
int count_elements_ax= sizeof(*x[0])/sizeof(int); // returns 1 
int count_elements_ax1= sizeof(x[0])/sizeof(int); // returns 2 
+3

왜이 모든 것을 통과해야합니까? 예를 들어,'std :: vector'를 사용할 수없고'.size()'를 사용할 수 있습니까? – CoryKramer

+4

간단히 말해서, 당신은 할 수 없습니다. 이 정보는'a'와'b'가'x'의 초기화 과정에서 포인터로 붕괴 될 때 잃어 버리게됩니다. – BoBTFish

+1

생각해보십시오. 'x [0]'의 타입은 무엇입니까? 'int *'입니다. 'sizeof (int *)'는 주어진 프로그램에 대해서만 하나 일 수있다. – juanchopanza

답변

4

당신이 x에 대한 접근 및 a에 액세스 할 수있는 경우 a의 요소를 계산하는 방법은 없습니다. ax 일 때까지는 포인터 일뿐입니다. 배열에 관한 정보는 더 이상 컴파일러에서 사용할 수 없습니다. 이것은 단지 내장 배열에 적용

size_t len[] = {count_elements_a, count_elements_b}; 

물론 :

이 같은 상황에서 일반적인 트릭은 길이의 별도의 배열을 사용하는 것입니다. C++ 표준 라이브러리는 멤버 함수를 호출하여 배열 크기를 찾을 수있는 std::vector 컨테이너를 제공합니다.