INFO: Casting a Pointer to Type Equivalent to MultidimensionalLast reviewed: September 2, 1997Article ID: Q43703 |
The information in this article applies to:
SUMMARYIn some situations you may need to cast a pointer or an address to a type that is equivalent to a multidimensional array. The following example demonstrates such a situation:
typedef char Arr2Dim [][20] ; void myfunc (Arr2Dim) ; char * ptr ; ... void main (void) { ... myfunc ( (Arr2Dim) ptr ) ; /* illegal */ ... }Casting the variable "ptr" to the array type "Arr2Dim" is not correct. The Microsoft C Compiler displays the following error message:
error C2067: cast to array type is illegalThe correct procedure is to cast the pointer "ptr" to a pointer type equivalent to the array type Arr2Dim. This pointer type can be defined as follows:
typedef char (*Ptr2Dim) [20] ;Casting "ptr" to the type of "Ptr2Dim", as follows, is correct and produces no warning messages when compiled at warning level 3:
myfunc ( (Ptr2Dim) ptr ) ;The address (or pointer) passed to the function is used correctly.
MORE INFORMATIONA similar solution may be applied to the problem of dynamically allocating a multidimensional array. For example, the following code fragment allocates a memory block, which can be used as a 10 x 20 x 30 three- dimensional array:
#include <malloc.h> typedef char (*Ptr3Dim) [20][30] ; Ptr3Dim ptr3arr ; ... void main (void) { ... ptr3arr = (Ptr3Dim) malloc (10 * sizeof(char) * 20 * 30) ; ... }After the allocation, "ptr3arr" can be used as a three-dimensional array, as follows, provided i, j, and k are integers within the proper range:
ptr3arr [i][j][k] = 'a' ; Keywords : CLngIss kbfasttip Version : MS-DOS:6.0,6.00a,6.00ax,7.0; WINDOWS:1.0,1.5,1.51,1.52; WINDOWS NT:1.0,2.0,2.1,4.0,5.0 Platform : MS-DOS NT WINDOWS Issue type : kbinfo |
================================================================================
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |