是否可以将一种类型的数组转换为另一种大小不同的数组?

时间:2017-02-24 21:39:02

标签: c++ arrays casting

例如,我可以采取

var associateRequest = new AssociateRequest
                                   {
                                       Target =
                                           new EntityReference(
                                               SalesOrder.EntityLogicalName,
                                               salesOrderGuid),
                                       RelatedEntities =
                                           new EntityReferenceCollection
                                               {
                                                   new EntityReference(
                                                       Annotation
                                                           .EntityLogicalName,
                                                       noteGuid)
                                               },
                                       Relationship = GetRelationship<SalesOrder>(nameof(SalesOrder.SalesOrder_Annotation)) ///////////????
                                   };

并仅通过强制转换指针将其转换为int array[12]; ,并假设char[48]在我的机器上是4个字节?这个的正确语法是什么,它是否适用?

我知道新数组的大小不会是明确的,我必须自己进行分组,再次,知道我的机器{{1是4个字节。

3 个答案:

答案 0 :(得分:1)

正确的C ++方式是使用reinterpret_cast

int array[12];
char* pChar = reinterpret_cast<char*>(array);

您应该注意sizeof(array)12*sizeof(int)等于12 * (sizeof(int) / sizeof(char)),因为sizeof(char),大多数(如果不是)任何机器都大于sizeof(char[3]) )通常是sizeof(int)的四分之一。

因此,int array[12];可以作为char array[12*4];

进行处理

答案 1 :(得分:1)

您可以使用reinterpret_cast将大多数指针类型转换为大多数其他指针类型。

用法:auto ptr = reinterpret_cast<char*>(array);

您可以使用int作为常量,而不是依赖于系统上sizeof(int)为4个字节的事实。你的问题的措辞让你觉得你可能会对这个&#34; size&#34;转换为char*时的数组。 intsizeof(int)char倍。如果sizeof(int) == 4,那么您的int会占用数组中的4 * 12 = 48个字节,而不是3个。

答案 2 :(得分:0)

 int array[12];
 char * p = (char *) array;
 // do what you want with p

当然,p没有类型char[3],但这对您来说可能并不重要。