【发布时间】:2017-12-17 00:08:52
【问题描述】:
假设我们有一个数组
int a[4];
使用指针算法找到最后一个元素有一个巧妙的技巧。据我所知,它正在使用“a”的地址并将其递增,以便它会立即指向数组之后,然后返回一个位置。
递增背后的想法是隐含的sizeof 正在完成。没有任何明确的sizeof。
有人知道它是怎么做的吗?
非常感谢!
【问题讨论】:
-
可能类似于
*(&a + 1) - 1(未检查/测试,我怀疑这是明确定义的) -
查看我的问题:Is
*((*(&array + 1)) - 1)safe to use to get the last element of an automatic array?。简而言之,*(&array + 1)调用 UB。 -
不清楚你的意思。没有“技巧”。 (无论如何,“技巧”在大多数时候都是个坏主意。)
-
@M.M
(int *)(&a + 1)转换有效吗?指针类型不兼容,我认为... -
是否有充分的理由避免使用
sizeof()?还是纯粹的学术问题?