11

我想传递一个指向函数的指针。我希望这个指针指向数组中间的某个地方。假设我有一个这样的数组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
4

7 回答 7

18

那会做,但只要做到:

 writeSECTOR( destAddress, &BufferData[i * 512]);

(听起来 writeSECTOR 确实应该采用 unsigned char* )

于 2010-10-06T13:08:35.870 回答
8

你可以这样做BufferData + i * 512。char* 上的算术运算+符在向其添加整数值时会生成 char*。

于 2010-10-06T13:09:39.207 回答
8

指针算法很容易理解。如果您有一个指向数组第一个元素的指针,则 p + 1 指向第二个元素,依此类推,无论每个元素的大小如何。因此,即使您有一个整数数组或任意结构 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 data[16384];
unsigned char *offset = data + 512; // same as &data[512]
*offset = 5; // same as data[512] = 5;

或者,如果符号令人困惑,您可以随时参考它,如上面的评论中所示,例如&data[512]

于 2010-10-06T13:14:21.720 回答
3

那应该行得通。在 C 中,将整数添加到指针会使指针增加整数乘以sizeof指针指向的类型。

于 2010-10-06T13:08:55.573 回答
0

看起来不错,但在编译器上试试,

您可以使用 writeSECTOR(destAddress, &BufferData[i * 512]);

于 2010-10-06T13:10:23.380 回答
0

看起来它将传入数组中第 i*512 个元素的地址。那是你想要它做的吗?

不过,我真的不明白转换为 int 是什么给你买的。

于 2010-10-06T13:11:18.810 回答
0

这应该像你想的那样工作。C 中的指针只是 RAM 中的一个地址,因此您可以在测量中漂移指针。

于 2010-10-06T13:43:53.443 回答