PIC*_*ain 9 c arrays pointers offset
我想传递一个指向函数的指针.我希望这个指针指向数组中间的某个位置.假设我有这样的数组unsigned char BufferData[5000];,下面的语句在语法上是否正确?
writeSECTOR( destAddress, (char *)( BufferData + (int)(i * 512 )) );
// destAddress is of type unsigned long
// writeSECTOR prototype: int writeSECTOR ( unsigned long a, char * p );
// i is an int
Run Code Online (Sandbox Code Playgroud)
nos*_*nos 17
那样做,但只是做到了:
writeSECTOR( destAddress, &BufferData[i * 512]);
Run Code Online (Sandbox Code Playgroud)
(听起来像writeSECTOR真的应该采取unsigned char*虽然)
指针算术很容易理解.如果你有一个指向数组第一个元素的指针,那么p + 1指向第二个元素,依此类推,无论每个元素的大小如何.因此,即使你有一个int数组,或任意结构MyData,它也会成立.
MyData data[100];
MyData *p1 = data;; // same as &data[0]
MyData *p2 = p1 + 1; // same as &data[1]
MyData *p3 = p2 + 1; // same as &data[2]
MyData *p4 = p2 - 1; // same as &data[0] again
Run Code Online (Sandbox Code Playgroud)
如果你的数组是unsigned char,那么你只需要添加许多你想要进入数组的字节偏移量,例如
unsigned char data[16384];
unsigned char *offset = data + 512; // same as &data[512]
*offset = 5; // same as data[512] = 5;
Run Code Online (Sandbox Code Playgroud)
或者,如果符号令人困惑,您可以随时引用它,因为它在上面的注释中显示,例如 &data[512]