假设我想得到一个大小未知的自动数组的最后一个元素。我知道我可以使用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))会给出未定义的行为
无需进一步分析。一旦表达式的任何部分给出未定义的行为,整个表达式就会给出