语法tips 3(结构体传参)

    xiaoxiao2021-12-14  20

    1:如何让系统自动告知你数据类型:

    假设有如下数据类型:

    #define NUM_OF_SG (4)

    #define SG_NUM (2)

    struct Oop_Setting_Group_Unit

    {

    int act_sg_no;

    float sg[NUM_OF_SG][SG_NUM];

    };

    int main() {

    struct Oop_Setting_Group_Unit  max[2];

    printf("%d \r\n",max);    //明知max不是%的类型,尝试printf时,printf会报错并提示类型。

    return 0;

    }

    编译时告警如下:

      test.c:12:10: warning: format ‘%d’ expects argument of type ‘int’, 

      but argument 1 has type ‘struct Oop_Setting_Group_Unit *’ [-Wformat=] printf("%d \r\n",max);  

    由此可知,max类型为“struct Oop_Setting_Group_Unit *”型,也可知max虽定义为结构体数组,但其实也就是结构体指针,而不是结构体数据组指针。

    2:传递结构体数组参数:

    #define NUM_OF_SG (4) #define SG_NUM (2) struct Oop_Setting_Group_Unit {

    int act_sg_no;

    float sg[NUM_OF_SG][SG_NUM];

    }; int fun(struct Oop_Setting_Group_Unit * dest) {

    printf("%f  %f\r\n",dest[1].sg[1][1],dest[0].sg[2][2]);

    return 0;

    } int main() {

    struct Oop_Setting_Group_Unit  max[2];

    max[1].sg[1][1] = 123.456;

    max[0].sg[2][2] = 456.789;

    fun(max); //直接传递max,为结构体指针

    //但是该printf输出“36   72”,此时又将max作为了结构体数组实际大小。由此可见“C专家”上写的,数组名和指针有时相等有时不等!

    printf("%d    %d \r\n",sizeof(struct Oop_Setting_Group_Unit),sizeof(max));

    return 0;

    }

    转载请注明原文地址: https://ju.6miu.com/read-962727.html

    最新回复(0)