我在论坛中发现了以下代码,我想知道const限定符在其中的表现如何?
const uint8_t data[] = { 15, 3, 41, 76, 2, 9, 5 };
val = data[5];
Run Code Online (Sandbox Code Playgroud)
现在,据我所知,const限定符使变量成为data[]只读,因此,在此示例中,无法修改数组的内容.令我困惑的是,限定符被应用于数组,这是一个指针,因此可以修改数组的内容,但指针本身不能.
我是对的吗?或者数组的内容是只读的?
一个数组,这是一个指针
不,不,不.数组不是指针.指针是一个地址(通常是当前桌面系统上的4或8个字节).数组是内存中的一系列连续对象,一个接一个.
在大多数表达式中,数组衰减为指针:当您使用数组的名称时,它会隐式转换为指向其第一个元素的指针.但是,这仅仅是一个转换,就像1皈依1.0初始化类型的变量时double.
鉴于上述情况,答案很明确:data是一个包含7个类型对象的数组const uint8_t,这意味着它的内容无法修改.在表达式中,data将隐式转换为type const uint8_t *(指向常量8位无符号整数的指针).