标量对象在初始化程序中需要一个元素

Rox*_*ate 14 c pointers

为什么当我想初始化以下向量时 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字节.


Bat*_*eba 5

在许多情况下,指针可以与数组互换。更正式地说,数组的第一个元素衰减为指针。

但也有例外,您在问题中引用的就是其中之一:在uint8_t *mmac_source1 = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x01 };语法上无效。从概念上讲,在第二种情况下,您是在堆栈上分配数组。在这种情况下使用指针是没有意义的。