通过一些C面试问题,我找到了一个问题,指出“如何在不使用sizeof运算符的情况下在C中查找数组的大小?”,并提供以下解决方案。它有效,但是我不明白为什么。
#include <stdio.h>
int main() {
int a[] = {100, 200, 300, 400, 500};
int size = 0;
size = *(&a + 1) - a;
printf("%d\n", size);
return 0;
}
如预期的那样,它返回5。
编辑:人们指出了这个答案,但是语法确实有所不同,即索引方法
size = (&arr)[1] - arr;
因此,我认为这两个问题都是有效的,并且对问题的处理方法略有不同。谢谢大家的大力帮助和详尽的解释!
*((*(&array + 1)) - 1)
安全使用得到一个自动数组的最后一个元素?。tl; dr *(&a + 1)
调用Undefined Behvaior
(ptr)[x]
与相同*((ptr) + x)
。
&a + 1
没有指向任何有效的对象,因此无效。