[英]accessing struct using pointers
#include<stdio.h>
#include<stdlib.h>
struct boo
{
int c;
int d;
};
struct foo
{
struct boo *nest;
int a;
int b;
};
int main() {
struct foo *f1, f2;
f1 = (struct foo*) malloc(sizeof(struct foo));
f1->nest = (struct boo*)malloc(sizeof(struct boo));
f1->a = 10;
f1->b = 5;
f1->nest->c=50;
f1->nest->d=42;
printf("%d, %d\n", f1->nest[0].c, f1->nest[0].d);
//50, 42
printf("%d, %d\n", f1->nest->c, f1->nest->d);
//50, 42
}
为什么 f1->nest[0].c 工作? 根据我的理解 f1->nest,nest 是指向 struct boo 的指针。 nest[0] 将返回 nest 指向的地址的第一个字节中的值,对吗? .c如何访问会员?
[]
运算符可用于任何指针。 arr[i]
100% 等同于*((arr) + (i))
因此在两行之间, +
运算符实际上是用于指针运算的运算符。
阅读加法运算符,然后 C17 6.5.6/7 说:
出于这些运算符的目的,指向不是数组元素的 object 的指针的行为与指向长度为 object 的类型作为其元素类型的数组的第一个元素的指针的行为相同。
这意味着我们总是可以使用任何 object 指针来执行指针运算,例如ptr + n
...当只有一个 object 而不是数组时,这不是很有意义。 我们还是不能越界访问这个单object。
尽管由于前面解释了指针算法和[]
运算符之间的等价性,但这也意味着我们始终可以执行arr[0]
来取消引用任何 object 指针,无论它是否为数组。
nest[0] 将返回 nest 指向的地址的第一个字节中的值,对吗?
不,它将返回第一个 struct的值,在一个单一结构的列表中。 它与编写更晦涩的(*(f1->nest + 0)).c
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.