길이

2012-08-01 2 views
3

가능한 중복 : 길이

int *arr = new int[n]; //n is entered by user 

그런 다음 배열의 길이를 찾으려면이 사용 :이 같은 동적 배열을 선언

How to find the sizeof(a pointer pointing to an array)

:

int len = sizeof(arr)/sizeof(int); 

n 대신 len1으로 표시합니다. 왜 그래야만하지?

+10

그냥 벡터를 사용하면 많은 시간을 절약 할 수 있습니다. – Caesar

+2

'int * arr = new int [n];'이 (가) 포인터를 선언하고 있습니다. 'std :: vector arr;'은 동적 배열을 선언하고있다. –

+0

동적 배열이 없습니다. 동적 배열의 첫 번째 요소에 대한 포인터 만 있습니다. –

답변

11

arr 때문에 당신은 할당 된 배열 또는 더 나은 사용의 크기를 저장해야 포인터

하지만, 포인터이기 때문에 그것은 당신에게 pointer의 크기를 제공하고, 당신은에서 실행중인 포인터의 크기가 int의 크기와 같은 아키텍처.

12

동적 배열의 경우 sizeof이 작동하지 않기 때문에. int *arr가 배열이 아닌 std::vector

+0

n이 사용자에 의해 입력되는 유효한'int arr [n]'과 같은 것입니까? – Jatin

+0

@Jatin :'n'은'const' 또는'const-expression'이어야합니다. 그렇지 않으면 컴파일러가 컴파일 시간에 할당 할 메모리의 양을 알지 못하기 때문에 컴파일되지 않습니다. – Andrew

+0

놀랍게도, 그것은 code :: blocks로 컴파일됩니다. – Jatin

0

Andrew가 맞습니다. n을 어딘가에 저장해야합니다 (사용 위치에 따라 다름). 또는 .NET을 사용하는 경우 Array 또는 List를 사용할 수 있습니다.