【发布时间】:2010-10-06 13:05:45
【问题描述】:
我想传递一个指向函数的指针。我希望这个指针指向数组中间的某个地方。假设我有一个像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
【问题讨论】:
-
是的。强制转换为
int是不必要的,否则您的声明是有效的。 -
事实上,我认为您的解决方案比下面许多建议的答案要好!
-
我更喜欢 &array[i] 方法,因为它更明显的是您将指针偏移到数组中,即 BufferData+(i*512) 关于其意图的可读性低于 &BufferData[i*512 ].
-
@Cthutu 我不同意。
array + i比&array[i]更具可读性,因为我将后者读作“取消引用数组、元素 i 并获取地址”,而不是更简单的“地址偏移 i 从数组”。您最喜欢的符号的问题在于它在一个语句中在指针和取消引用之间切换。而指针加法只是纯数学。 -
你不是真的因为编译器会产生相同的代码。但这确实是一个主观的事情。当我看到数组括号时,我知道它是指向数组的指针并考虑范围。