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

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

正在使用*(*(&数组+1))-1)safe?

比如:

字符数组[SOME_SIZE]={…};
printf(“最后一个元素=%c”,*(*(&数组+1))-1));
int数组[SOME_SIZE]={…};
printf(“最后一个元素=%d”,*(*(&数组+1))-1));

不,不是

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

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

发表评论