为什么C初始化会将数组地址设置为零?
背景: 微控制器:MKL26Z128 IDE:Kinetis设计工作室3.0.0 此代码将USBStringDescriptor的地址设置为零为什么C初始化会将数组地址设置为零?,c,arrays,initialization,memory-address,C,Arrays,Initialization,Memory Address,背景: 微控制器:MKL26Z128 IDE:Kinetis设计工作室3.0.0 此代码将USBStringDescriptor的地址设置为零 uint8_t usbStringDescriptors[NUM_OF_STRING_DESCRIPTORS][MAX_BYTES_PER_USB_STRING] = {0}; uint8_t manStringDescriptor[MAX_BYTES_PER_USB_STRING] = {0}; …从列表文件中删除 225
uint8_t usbStringDescriptors[NUM_OF_STRING_DESCRIPTORS][MAX_BYTES_PER_USB_STRING] = {0};
uint8_t manStringDescriptor[MAX_BYTES_PER_USB_STRING] = {0};
…从列表文件中删除
225 .LFE57:
227 .global usbStringDescriptors
228 001e C046 .section .bss.usbStringDescriptors,"aw",%nobits
229 .align 2
232 usbStringDescriptors:
233 0000 00000000 .space 198
233 00000000
233 00000000
233 00000000
233 00000000
234 .global manStringDescriptor
235 00c6 0000 .section .bss.manStringDescriptor,"aw",%nobits
236 .align 2
239 manStringDescriptor:
240 0000 00000000 .space 66
225 .LFE57:
227 .comm usbStringDescriptors,198,4
228 .comm manStringDescriptor,66,4
…在地图文件中
.bss.usbStringDescriptors
0x00000000 0xc8 ./adapter/common/usb_core_ksdk/host/host_iAP.o
此代码不适用
uint8_t usbStringDescriptors[NUM_OF_STRING_DESCRIPTORS][MAX_BYTES_PER_USB_STRING];
uint8_t manStringDescriptor[MAX_BYTES_PER_USB_STRING];
…从列表文件中删除
225 .LFE57:
227 .global usbStringDescriptors
228 001e C046 .section .bss.usbStringDescriptors,"aw",%nobits
229 .align 2
232 usbStringDescriptors:
233 0000 00000000 .space 198
233 00000000
233 00000000
233 00000000
233 00000000
234 .global manStringDescriptor
235 00c6 0000 .section .bss.manStringDescriptor,"aw",%nobits
236 .align 2
239 manStringDescriptor:
240 0000 00000000 .space 66
225 .LFE57:
227 .comm usbStringDescriptors,198,4
228 .comm manStringDescriptor,66,4
由于这些数组具有静态存储,因此无论是否放置
{0}
初始值设定项,实际上都没有区别。当控件到达main()
函数时,它们将被初始化为0
- 如果放置初始值设定项,则数据可能存在于可执行文件中,从而使其更大,加载速度也可能较慢
- 如果没有,数据将位于未初始化的段(也称为bss或common段)中,并在正常环境中由加载程序初始化为0
出于上述原因,第二个选项是首选的。由于这些数组具有静态存储,因此无论是否放置
{0}
初始值设定项,实际上都没有区别。当控件到达main()
函数时,它们将被初始化为0
- 如果放置初始值设定项,则数据可能存在于可执行文件中,从而使其更大,加载速度也可能较慢
- 如果没有,数据将位于未初始化的段(也称为bss或common段)中,并在正常环境中由加载程序初始化为0
出于上述原因,第二个选项是首选的。因为第一个表示=0,第二个表示不为0?为什么第二个代码要将值设置为零?与第一段代码不同,您没有要求它。因为数组不是指针,所以数组不可能有0“值”。如果使用将0显示为其值的数组不会导致崩溃,我认为这是调试器的问题,您应该忽略它。您可以显示用于获得该结果的所有代码吗?一个完整的例子将有助于确保不是其他东西将指针设置为null。我们需要可编译和可执行的代码,或者水晶球,而我的代码目前已不再使用……因为第一个代码表示=0,第二个代码表示不为0?为什么第二个代码要将值设置为零?与第一段代码不同,您没有要求它。因为数组不是指针,所以数组不可能有0“值”。如果使用将0显示为其值的数组不会导致崩溃,我认为这是调试器的问题,您应该忽略它。您可以显示用于获得该结果的所有代码吗?一个完整的示例将有助于确保指针指向null不是其他设置。我们需要可编译和可执行的代码,或者一个水晶球,而我的当前已不再使用。。。