CURVE、CURVE[0]、&CURVE[0][0], (INT16U*) CURVE 是同一个地址,但是不同的类型。
curve[0] 是一个指针,指向一个[2]的数组,&CURVE[0][0]指向二维数组的第一个元素。由于二维数组的元素在 c/c++ 基本上是连续存放,可以被当作一个一维数组(c#, java 中的二维是存放了指针,指针指向不同的一维数组,所以不能直接强制为一个一维数组), 所以可以通过CURVE、&CURVE[0][0], (INT16U*) CURVE等等强制转换为 INT16U*.
如果要避免类型错误,则可使用 9 楼的强制:
void ConctLine(INT16U *STR,INT8U LEN)
ConctLine(((INT16U *)CURVE, len)
或者函数原型使用
void ConctLine(INT16U (*STR)[2] ,INT8U LEN)
这里的(*STR)[2]是说明 str 是一个指向一个有两个元素的数组的指针,与 int16u * 的类型不同。 其中: ((int) str[1]) - ((int) str[0]) = sizeof(INT16U) * 2
|