• C

casting a pointer to unsigned int

I came across something like the foll:

packet_initialize ( (PACKET_HANDLE )p_pkt);

where typedef UINT PACKET_HANDLE;
and struct packet *p_pkt;

I wonder how a pointer to packet can be  cast to an unsigned int

Who is Participating?
sunnycoderConnect With a Mentor Commented:
Hi arut,

while it is not the best of the things to do but it is possible to make such casts ... infact on several platforms, a pointer is nothing but an unsigned 32 bit quantity (same as unsigned int!!!)

without the explicit cast, you would get a warning
warning: assignment makes pointer from integer without a cast

with a cast, compiler accepts it

just to add, the cast will compile without a warning if you compile it with -pedantic option

compiler just needs to be sure that you know what you are doing
Dear arut,

 The basic concept of Pointers in C is hold a uint value which is expected to be a reference to the memory location.
if you declare a pointer like   void *void_ptr;  it can hold any type of pointer reference. but it should be handled like a hash key. the address of datum which u r storing in that should be referenced using the same type only.

           int int_, *int_ptr;
          FILE *fp1, *fp2;
          void *void_;
           void_ = &int_;
           int_ptr = ( int *) void_;

           void_ = fp1;
           fp2 = ( FILE *)void_;

 like that. in one line to say you can play withe uint value with the pointer to reference. provided dereferencing should be casted to get the exact result. Hope this gives a solution . all the best
efnConnect With a Mentor Commented:
The definition of C specifies that you can convert a pointer to an integer and an integer to a pointer, but it doesn't guarantee that there will necessarily be any integer type that is large enough to hold all the information in a pointer, so information could be lost in the conversion from pointer to integer.

As to how, in the words of Harbison and Steele, "the pointer is treated as if it were an unsigned integer of a size equal to the size of the pointer. ... If null pointers are not represented as the value 0, then they must be explicitly converted to 0 when converting the null pointer to an integer."  (from "C:  A Reference Manual," 4th ed., 1995)

If this machine has UINT type big enough to hold a pointer, this cast will probably "work".  A better question to ask is why the called function expects a UINT when a pointer to a packet would make a  heck of a lot more sense.   There may be some not very good historical or arbitrary design decision lurking in there.  It wouldnt hurt to look into that aspect.  Maybe you can get the design changed.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.