以下简短代码段导致无效的初始化错误,作为C语言的初学者,我不明白为什么。
unsigned char MES[] = { 0x00, .... };
unsigned char *in[] = &MES;
这不是正确的方法吗?
答案 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;
除了具有有限的大小(对于任何数据都是如此)之外,并且如果您打印in
和in2
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
并产生良好的泄漏