Когда вы используете массив в выражении, если он не является аргументом &
или sizeof
, он оценивается по адресу первого элемента.
Таким образом &st[3] - st
оценивается как &st[3] - &st[0]
, который является просто арифметикой указателя: Разница между адресами двух элементов массива - это просто разница между их индексами, т.е. 3 - 0
, что дает 3
.
Единственная проблема заключается в том, что результаттипа ptrdiff_t
, но printf
%ld
ожидает long int
.Если эти типы отличаются на вашем компьютере, он не будет работать.В строке формата printf()
правильный модификатор длины для ptrdiff_t
равен t
- используйте "\n%td\n"
.