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;
}