这是什么意思:(*)作为C中的类型的一部分

时间:2014-10-21 11:42:29

标签: c

我读了一些示例C代码并看到了这一行:

Func((const float(*)[5])ptr);   

当func签名为:

Func(const float*)   

ptr是一个float 2d数组。问题是(*)是什么意思?

1 个答案:

答案 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 

至于你的例子,那就是类型不匹配。