C++中typedef数组类型与new的类型匹配问题及正确写法问询
问题解析与解决方案
错误逻辑说明
当你定义typedef int T[2];时,T的类型是包含2个int的数组类型,此时T*表示的是指向这种长度为2的int数组的指针(即类型int (*)[2])。
而new int[2]返回的是int*类型——这是指向数组第一个元素的指针,和T*的类型完全不兼容,因此编译器会抛出cannot convert 'int*' to 'int (*)[2]'的类型转换错误。
正确代码写法
要分配类型为T的对象(即一个长度为2的int数组),并让返回的指针与T*匹配,直接使用new T即可:
typedef int T[2]; int main() { T* p = new T; }
此时new T会分配一个T类型的对象(也就是一个int[2]数组),返回的指针类型正是T*(即int (*)[2]),完全匹配变量p的类型。你可以通过sizeof(*p)验证,结果会等于sizeof(int)*2,符合T类型的大小。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

