Re: Warning when using const pointer to fixed size array

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> 
> You're really tying yourself in knots here.  The
> address of an array
> is the address of its first member, so
> 
> int main() {
> 
>    int array[9] = {0};
> 
>    const int *p = array;
> 
>    return p[0];
> }
> 
> Andrew.
> 

The advantage of declaring a pointer like I had mentioned in my original
posting is that I will get a compiler error if someone tries to give me a
buffer of a different size. Let's say you are only working
with fixed size buffers and you are expecting to get a pointer to one of
them. The prototype of your function could look like this:

void foo(const int * p, int plen);

However, in this case you will have to:

a) Verify that plen matches the fixed size you are expecting

b) Trust that the caller indeed gave you a buffer p with valid plen
   memory locations.

c) Problems will not be caught at compile time. Only at run-time.

This is ok if you are working with buffers that may vary in size. But if
your buffers have a fixed size, wouldn't it be better to do this?

void foo(const int (* p)[9]);

In this case, you are guaranteed that the caller is giving you a valid
buffer. Otherwise, you will get a compile error message which will help
you quickly detect a problem.

Do you understand now the motivation behind the question?

This is the reason why I am trying to do this:

int array[9];
const int (* p)[9] = &array;

But gcc complains that:

"warning: initialization from incompatible pointer type"

And I don't see why. Where in the standard it says that I am not allowed 
to do this? Should I log a bug against gcc so that I can get an explanation
from the developers themselves?

Thanks



      __________________________________________________________________
Make your browsing faster, safer, and easier with the new Internet Explorer® 8. Optimized for Yahoo! Get it Now for Free! at http://downloads.yahoo.com/ca/internetexplorer/



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux