问题:替换形式
假设有如下结构体数组,请看如下代码:
struct Data {
int x, y;
} a[2];
请用尽可能多的形式,替换下面代码中 &a[1].x 的部分,使得代码效果不变:
struct Data *p = a;
printf("%p", &a[1].x);
实现代码1
struct Data *p = a;
printf("%p", &((a + 1)->x));
解决方案:
直接用 a + 1 定位到第二个结构体元素的首地址,然后间接引用 x 字段,最后再对 x 字段取地址,那么得到的和原任务中所输出的地址是一样的。
实现代码2
struct Data *p = a;
printf("%p", &(a[0].y) + 1);
解决方案:
首先,定位到 a[0] 元素中 y 字段的首地址,然后对 y 字段取地址,这个时候,由于 y 字段是整型,所以取到的地址类型就是整型地址,之后再对这个整型地址执行 +1 操作,得到的也是 a[1].x 的首地址。