我读了一些示例C代码并看到了这一行:
Func((const float(*)[5])ptr);
当func签名为:
Func(const float*)
ptr
是一个float
2d数组。问题是(*)
是什么意思?
答案 0 :(得分:0)
如果该函数将声明为
void f( const float a[][5] ) { puts( "Inside f" ); }
和ptr
的类型为
float ptr[10];
然后这个电话
f( ( const float ( * )[5] )ptr );
使用从float *
转换为const float ( * )[5]
例如
#include <stdio.h>
void f( const float a[][5] ) { puts( "Inside f" ); }
int main(void)
{
float ptr[10];
f( ( const float ( * )[5] )ptr );
return 0;
}
此声明
const float ( * )[5]
表示指向包含const float类型的5个元素的数组的指针。
或者这是一个更有趣的例子
#include <stdio.h>
void f( const float a[][5], size_t n )
{
size_t i, j;
for ( i = 0; i < n; i++ )
{
for ( j = 0; j < 5; j++ ) printf( "%f ", a[i][j] );
printf( "\n" );
}
}
int main(void)
{
float p[10] = { 0.0f, 1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f };
f( ( const float ( * )[5] )p, 2 );
return 0;
}
输出
0.000000 1.100000 2.200000 3.300000 4.400000
5.500000 6.600000 7.700000 8.800000 9.900000
至于你的例子,那就是类型不匹配。