0

有没有办法从 int** 创建一个 const int**?

我目前正在使用:

const int **pixel2=*pixel;

const char **header2=*header;

我不断收到错误:cscd240HW34.c:52:21: warning: initialization from incompatible pointer type [enabled by default] const int **pixel2=*pixel;

4

1 回答 1

1

如果pixel已经是类型,int **那么:

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

作为解释:需要强制转换的原因是因为这仍然没有给您提供您可能想象的那样多的类型安全性。例如,您现在可以编写:

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

所以,看看是否有另一种方法来做你想做的事。请注意,这个定义pixel2避免了这种利用

const int * const * pixel2;

尽管可悲的是 C 仍然需要强制转换才能分配pixelpixel2.

这个问题是 clc FAQ 中的 11.10。

于 2014-03-09T20:55:51.770 回答