向指针添加值

时间:2018-06-19 10:16:26

标签: c arrays pointers

我尝试将addr格式更改为数组,但无法理解我的错误所在。

uint8 a[255] = {1, 2, 3, 4...., 66};
main(){
uint8 *testpointer;
testpointer = (&a + 32);

地址表格我的a []是0x00000FC。我希望testpointer得到地址0x00000FC + 32.但如果我在我的代码中这样做,它会得到一个0x000020DG的地址。

2 个答案:

答案 0 :(得分:4)

问题是&a。这为您提供了指向数组的指针,而不是第一个元素。

&a的类型为uint8 (*)[255],而不是uint8 *

要解决您的问题,您需要使用普通a,因为它会衰减到指向其第一个元素的指针(a等于&a[0])。

答案 1 :(得分:3)

指针算法遵循指向的类型

&a的类型为uint8 (*) [255],即指向整个数组的指针,而不是指向数组第一个元素的指针,因此在算术中使用它会导致超出范围的内存

您需要a,而不是&a。在大多数条件下使用时,数组类型衰减为指向第一个元素的指针,这是此处所需的操作数。