我想传递指向函数的指针。我希望这个指针指向数组中间的某个位置。假设我有一个类似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
答案 0 :(得分:17)
那样做,但只是做到了:
writeSECTOR( destAddress, &BufferData[i * 512]);
(听起来像writeSECTOR真的应该采用unsigned char *)
答案 1 :(得分:7)
你可以BufferData + i * 512
。 char *上的算术+
运算符在向其添加整数值时会生成char *。
答案 2 :(得分:5)
指针算法很容易理解。如果你有一个指向数组第一个元素的指针,那么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
如果你的数组是unsigned char,那么你只需要添加许多你希望进入数组的字节偏移量,例如
unsigned char data[16384];
unsigned char *offset = data + 512; // same as &data[512]
*offset = 5; // same as data[512] = 5;
或者,如果符号令人困惑,您可以随时引用它,因为它在上面的注释中显示,例如: &data[512]
答案 3 :(得分:3)
那应该有用。在C中,向指针添加一个整数会使指针增加整数乘以指针指向的sizeof
类型。
答案 4 :(得分:0)
它看起来不错,但是在编译器上试试,
您可以使用writeSECTOR(destAddress,& BufferData [i * 512]);
答案 5 :(得分:0)
看起来它将传递数组的第i个第512个元素的地址。那是你想要的吗?
我真的没有看到那个施加给int的东西是在买你。
答案 6 :(得分:0)
这应该像你想象的那样奏效。 C中的指针只是RAM中的一个地址,因此您可以在指针中漂移指针。