C“错误:无效的初始化程序”

时间:2018-07-26 08:21:51

标签: c

以下简短代码段导致无效的初始化错误,作为C语言的初学者,我不明白为什么。

unsigned char MES[] = { 0x00, .... };
unsigned char *in[] = &MES;

这不是正确的方法吗?

2 个答案:

答案 0 :(得分:1)

&MES是指向unsigned char数组的指针。

in是指向unsigned char的指针的数组。

尝试:

unsigned char (*in)[] = &MES;

这使得in也是指向unsigned char数组的指针。

答案 1 :(得分:0)

我认为您要实现的目标如下:

unsigned char MES[] = { 0x00 };
unsigned char *in = MES;

in限定为一个数组(其大小未知),如下所示

unsigned char (*in2)[] = &MES;

除了具有有限的大小(对于任何数据都是如此)之外,并且如果您打印inin2

,也不会在其中添加有价值的信息。
printf ("%lx\n", (long unsigned int) in);
printf ("%lx\n", (long unsigned int) in2);

值应相同。

不要混淆数据的位置和引用的位置。

使用&MES就像尝试读取内存中写入数组位置的位置。但这不存在。

考虑反例:

 void *reference_to_memoryarea = malloc(3);
 void **reference_to_the_reference = &reference_to_memoryarea;

这里位置存在并且在内存中具有位置,将其存储在其中。而且您可以写入*reference_to_the_reference并产生良好的泄漏