1、题目:
我们经常使用的点类Point结构体,其中包含两个int变量x与y,这是属于二维平面上点类。现假设我们的点类Point是属于多维空间中的点,其中包含多个相同类型(类型未知)的变量(第一个一定是x)表示坐标,你能否使用宏定义的方式,从使用空间的角度算出这个点类有多少个变量?
2、思路:
题目展示了二维的int型点类结构体如下:
struct Point {
int x;
int y;
};
现用来测试的点类结构体不知道是几维的,但第一个变量一定是x,且x是什么类型的变量剩下的维度也是这种类型。题目要求要使用宏定义的方式来算出这个点类结构体有多少个变量(即有几维)
3、代码
#define length(point) (sizeof(point) / sizeof(int))
int define_count(struct Point point ) {
return length(point);
}
sizeof(point) / sizeof(int) 取结构体变量名的长度/int的长度 可得到该结构体的变量个数
但是前提是这些变量都是int型,而题上说变量的类型未知,所以做如下改变:
#define length(point) (sizeof(point) / sizeof(typeof(point.x)))
int define_count(struct Point point ) {
return length(point);
}
先判断第一个变量x的类型 再去取长度。
总结: typeof(point.x) point.x是结构体变量名引用结构体内的变量
typeof关键字能取变量的类型
struct Point point 是结构体名+结构体变量名的形式
后记:种一棵树最好的时间是十年前 其次是现在