我尝试将addr格式更改为数组,但无法理解我的错误所在。
uint8 a[255] = {1, 2, 3, 4...., 66};
main(){
uint8 *testpointer;
testpointer = (&a + 32);
地址表格我的a []是0x00000FC。我希望testpointer得到地址0x00000FC + 32.但如果我在我的代码中这样做,它会得到一个0x000020DG的地址。
答案 0 :(得分:4)
问题是&a
。这为您提供了指向数组的指针,而不是第一个元素。
&a
的类型为uint8 (*)[255]
,而不是uint8 *
。
要解决您的问题,您需要使用普通a
,因为它会衰减到指向其第一个元素的指针(a
等于&a[0]
)。
答案 1 :(得分:3)
指针算法遵循指向的类型。
&a
的类型为uint8 (*) [255]
,即指向整个数组的指针,而不是指向数组第一个元素的指针,因此在算术中使用它会导致超出范围的内存
您需要a
,而不是&a
。在大多数条件下使用时,数组类型衰减为指向第一个元素的指针,这是此处所需的操作数。