On Thu, Mar 31, 2016 at 03:18:17PM +0100, KatolaZ wrote:
> On Thu, Mar 31, 2016 at 03:12:32PM +0200, Edward Bartolo wrote:
> > Hi, thanks for taking time to reply,
> > 
> > KatolaZ wrote:
> > >> c) type **ss; // declare a pointer to pointer. System only allocates
> > >> space for one address
> > 
> > > C pointers are *always* one variable, precisely a variable large
> > > enough to store a memory address on the current architecture.
> > 
> > I think, I did not understand what you want to say. As far as I can
> > imagine a pointer to pointer is something like this:
> > [pointer1]------>[pointer2]------->[data]  int the case of data** dt.
> > 
> > OR
> > 
> > [pointer1]------>[pointer2] in the case of void** ptr.
> > 

Your example would be correct *only if* and pointer1, pointer2 
actually contained proper addresses of memory instead of containing 
uninitialized junk or NULL.

And that, I think, is what KatolaZ is tryng to point out.
> 
> Nope. This is totally wrong. What you have in memory after a
> declaration:
> 
>   type *a;
> 
> is just *one variable*, namely a variable able to contain a memory
> address.

Yes.  It is only when you actually assgn a pointer to a that your 
   pointer----->data

diagram becomes valied.

-- hendrik

> When you declare:
> 
>   type **b;
> 
> you still have exactly *one variable* allocated in memory, namely one
> variable able to contain a memory address, and not *two variables* as
> in your example above.  This does not depend on what "type" is, so
> each of the following declarations:
> 
>  int  *a;
>  double ***b;
>  void ****c;
>  myowntype **d;
> 
> will result in the allocation of exactly *one variable*, namely a
> variable large enough to contain a pointer (i.e., a memory address). I
> don't want to confuse you, but in my example myowntype might also be
> declared as:
> 
>   typedef char*** myowntype;
> 
> and still the declaration:
> 
>   myowntype **d;
> 
> will reserve exactly one variable in memory, namely a variable large
> enough to contain a memory address.
> 
> The declaration is used only by the compiler to understand what is the
> implicit semantic of the pointer arithmetic to be used with that
> pointer, and to check that you are not palying nastly with it, so that
> 
>   int *p;
>   ...
>   p += 1;
> 
> assigns to p the address of the memory location which is 1*sizeof(int)
> bytes after the old address stored into p, while:
> 
>   double *p;
>   ...
>   p +=2;
> 
> will assign to p the address of the memory location which is
> 2*sizeof(double) bytes after the old address stored in p. 
> 
> You have not broken the pointers spell, yet. I warmly suggst you to
> read a good introduction to C pointers, but the only thing that comes
> to my mind is the Kernighan and Ritchie, which I admit is not the
> easiest book around (although it is certainly the best on the
> subject).
> 
> 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
> Dng@lists.dyne.org
> https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to