为什么当我想初始化以下向量时 uint8_t
uint8_t *mmac_source1 = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x01 };
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
Error: scalar object 'mmac_source1' requires one element in initializer
Run Code Online (Sandbox Code Playgroud)
但是当我使用它时:
uint8_t mmac_source1[6] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x01 };
Run Code Online (Sandbox Code Playgroud)
它工作正常.
Gin*_*cob 12
uint8_t *mmac_source1 = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x01 };
Run Code Online (Sandbox Code Playgroud)
这里没有分配给指针的内存.
mmac_source1
只是作为占位符,您可以存储地址.
uint8_t mmac_source1[6] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x01 };
Run Code Online (Sandbox Code Playgroud)
这里有一个数组,在编译器中分配sizof(uint8_t)*6
字节.
在许多情况下,指针可以与数组互换。更正式地说,数组的第一个元素衰减为指针。
但也有例外,您在问题中引用的就是其中之一:在uint8_t *mmac_source1 = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x01 };
语法上无效。从概念上讲,在第二种情况下,您是在堆栈上分配数组。在这种情况下使用指针是没有意义的。