c – 我可以反转数组到指针衰减的过程吗?
发布时间:2020-12-16 07:28:17 所属栏目:百科 来源:网络整理
导读:将指向数组第一个元素的指针强制转换为指向整个数组的指针是否合法? templatetypename T,size_t Nvoid whatever(T()[N]){ std::cout N 'n';}int main(){ int a[10]; int * p = a; whatever(*(int(*)[10])(p)); // -- legal?} 这在我的编译器上打印10,但我
将指向数组第一个元素的指针强制转换为指向整个数组的指针是否合法?
template<typename T,size_t N> void whatever(T(&)[N]) { std::cout << N << 'n'; } int main() { int a[10]; int * p = a; whatever(*(int(*)[10])(p)); // <-- legal? } 这在我的编译器上打印10,但我不确定C标准是否允许它. 解决方法
不,这不合法(因为它的未定义行为).指向整个数组的指针是& a not p.基本上,你正在向另一个指向一个指针.该标准描述了所有允许的转换,而且这个转换不在其中.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |