Я искал решение, чтобы узнать длину массива в C ++.Одно из решений, которое я нашел, это
int arr[] = {1,2,3,4,5,6};
int size = *(&arr+1)-arr; //size is the length of the array
Я был перепутан между &arr
и arr
, так как оба дают базовый адрес массива.Снова гуглил и обнаружил, что &arr + 1
дает адрес следующего блока памяти, который не является частью массива, где arr + 1
дает адрес следующего элемента в массиве.
Я написал следующий код дляпроверить разницу между &arr
и arr
:
int arr[] = {1,2,3,4,5,6};
printf("value of &arr + 1 - &arr = %d\n", &arr + 1 - &arr);
printf("value of *(&arr + 1) - arr = %d\n", *(&arr + 1) - arr);
Ответ на первый printf
равен 1
, где вторым printf
дает 6
.Это та часть, которая меня смущает: поскольку &arr
и arr
содержат базовый адрес одного и того же массива, почему результаты отличаются?