我对这种语法有点困惑。
void function ( float (*points)[2]);
这是否声明了一个浮点指针数组?如果是这样,为什么以下代码返回错误:
void foo( float (*points)[2]) {}
float *p[2];
foo(p); // error
float (*p)[2];
foo(p); // okay
为什么需要括号?
答案 0 :(得分:4)
float *p[2]
定义了float*
的数组,大小为2。
float (*p)[2]
定义指向float
数组的指针,大小为2:
int main(int argc, char* argv[])
{
float* p[2];
p[0] = new float(0.0);
p[1] = new float(1.0);
std::cout << *(p[0]) << " , " << *(p[1]) << "\n";
float Q[2] = { 0.0, 1.0 };
float(*q)[2] = &Q;
std::cout << (*q)[0] << " , " << (*q)[1] << "\n";
delete p[0];
delete p[1];
}
请注意,如果Q
和q
的尺寸不匹配,则会收到错误消息:
float Q[3] = { 0.0, 1.0, 2.0 };
float(*q)[2] = &Q; //error C2440: 'initializing' : cannot convert from 'float (*)[3]' to 'float (*)[2]'
答案 1 :(得分:1)
这是一个指向两个浮点值数组的指针。它的实际用途是能够传递二维数组,其中一维固定为2:
float data[][2] = {{1.2, 3.4}, {5.6, 7.8}, {9.1, 10.2}};
foo(data);
通常,像这样的函数也会占用数组的整体大小。
或者,像这样的函数可用于分配两个浮点数的数组,并将指针设置为分配结果。