On Wed, Mar 30, 2016 at 09:16:22AM +0200, Edward Bartolo wrote: > Hi and many thanks for the replies, > > I can understand that a pointer being an address depends heavily on > machine architecture which means, on 32 bit machines it is 4 bytes > long and on 64 bit machines it is 8 bytes long. I also understand that > a pointer variable is essentially made of two parts as illustrated > below: > > address [always allocated] ------------------> data [not allocated > automatically] > > The address does depend on architecture but the data? And what else > can enter into a pointer's definition other than what I illustrated? >
Hi Edward, sorry but your description is incorrect. A pointer in C is just a variable large enough to contain a memory address. Period. There is no explicit or implicit linking between a pointer (which is a variable large enough to contain a memory address) and the area of memory it points to. You may have several pointers pointing to the same memory area. You can have the same pointer (i.e., the same named variable able to contain a memory address) pointing to different memory areas at different times. You can use a pointer to wander around an allocated memory area at your will, changing its value by using the powerful pointer arithmetic provided by C. You can also have some allocated memory area for which you don't have any pointer at all (and this is what is called a "memory leak", and you should avoid it). Also, memory areas are not "typed" in C, meaning that you can in principle access a correctly allocated memory area with pointers of any type, the only problem being the semantics of pointer arithmetics, which is entirely left to the programmer. But please forget any implicit linkage between a pointer (the variable) and the memory area it points to (i.e., the address contained in that variable), as you don't assume any intrinsic link between an integer variable and the possible values that the variable can contain. If you don't break this spell, you will never get around with C pointers. Pointers are just variables which are able to contain memory addresses. What you put in those variables does not bother them in any discernible way. And shouldn't bother you either, as long as you be careful in using them to refer to correctly allocated memory. SIGSEGV is the alternative. My2Cents KatolaZ -- [ Enzo Nicosia aka KatolaZ --- GLUG Catania -- Freaknet Medialab ] [ me [at] katolaz.homeunix.net -- http://katolaz.homeunix.net -- ] [ GNU/Linux User:#325780/ICQ UIN: #258332181/GPG key ID 0B5F062F ] [ Fingerprint: 8E59 D6AA 445E FDB4 A153 3D5A 5F20 B3AE 0B5F 062F ] _______________________________________________ Dng mailing list [email protected] https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng
