gpt4 book ai didi

c - 使用 `*((*(&array + 1)) - 1)` 获取自动数组的最后一个元素是否安全?

转载 作者:太空狗 更新时间:2023-10-29 16:21:23 24 4
gpt4 key购买 nike

假设我想获取大小未知的自动数组的最后一个元素。我知道我可以使用 sizeof 运算符来获取数组的大小并相应地获取最后一个元素。

使用 *((*(&array + 1)) - 1) 安全吗?

喜欢:

char array[SOME_SIZE] = { ... };
printf("Last element = %c", *((*(&array + 1)) - 1));
int array[SOME_SIZE] = { ... };
printf("Last element = %d", *((*(&array + 1)) - 1));

等等

最佳答案

不,不是。

&array 是指向 char[SOME_SIZE] 的指针类型(在给出的第一个示例中)。这意味着 &array + 1 指向紧接 array 末尾的内存。取消引用(如 (*(&array+1)) 给出未定义的行为。

无需进一步分析。一旦表达式的任何部分给出未定义的行为,整个表达式都会这样做。

关于c - 使用 `*((*(&array + 1)) - 1)` 获取自动数组的最后一个元素是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32537471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com