Solved

casting a pointer to unsigned int

Posted on 2003-11-13
7
874 Views
Last Modified: 2012-06-27
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

0
Comment
Question by:arut
7 Comments
 
LVL 45

Accepted Solution

by:
sunnycoder earned 125 total points
ID: 9745595
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


Cheers!
Sunny:o)
0
 
LVL 45

Expert Comment

by:sunnycoder
ID: 9745625
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
0
 

Expert Comment

by:pkarth
ID: 9745690
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
-regards
 pkarth
       
           
           
           
0
 
LVL 15

Assisted Solution

by:efn
efn earned 125 total points
ID: 9745739
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)

--efn
0
 
LVL 22

Expert Comment

by:grg99
ID: 9754078
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.



0

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand and use pointers in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use structures in the C programming language.

759 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now