0

Is there way to create an const int** from an int**?

I'm currently using:

const int **pixel2=*pixel;

const char **header2=*header;

I keep getting the error: cscd240HW34.c:52:21: warning: initialization from incompatible pointer type [enabled by default] const int **pixel2=*pixel;

kevorski
  • 816
  • 1
  • 11
  • 29

1 Answers1

1

If pixel is already of type int ** then:

const int **pixel2 = (const int **)pixel;

By way of explanation: the reason a cast is required is because this still doesn't give you as much type-safety as you might think. For example you could now write:

const int c = 'x';
*pixel2 = &c;    // fine, both are const int *
**pixel = 'y';   // no compiler error, but UB as we modify a non-writable object

So, see if there is another way to do what you want to do. Note that this definition of pixel2 avoids that exploit

const int * const * pixel2;

although sadly C still requires a cast to assign pixel to pixel2.

This question is 11.10 in the c.l.c. FAQ.

M.M
  • 138,810
  • 21
  • 208
  • 365