我对这种语法有点困惑。
void function ( float (*points)[2]);
Run Code Online (Sandbox Code Playgroud)
这是声明了一个浮点指针数组吗?如果是这样,为什么以下代码返回错误:
void foo( float (*points)[2]) {}
float *p[2];
foo(p); // error
float (*p)[2];
foo(p); // okay
Run Code Online (Sandbox Code Playgroud)
为什么需要括号?
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];
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果的大小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]'
Run Code Online (Sandbox Code Playgroud)