[英]Dot operator on pointer to a struct
可以说我有一个结构
typedef struct list_entry {
int val;
int val2;
} list_entry;
和一个指向它的指针
list_entry list;
list_entry* pList = &list;
如果*pList
返回存储在pList
中的地址的值,并且由于pList
保存列表的地址, *pList
应该返回存储在 val 中的数字,那么(*pList).val2
怎么会给出存储在list.val2
中的值? 提前致谢。
让我们假设int
是 4 个字节。 现在list_entry
至少有 8 个字节。 然而pList
只指向这 8 个字节中的第一个。
现在所有这些表达式如何工作? 在 C (以及 C++ )中,编译器查看整个表达式。 .val2
成员可能是一个 4 字节的值,字节偏移量为 4-7。 不要担心确切的细节,这是编译器的工作。 如果在val
和val2
之间插入一个成员,一切都会移动,但编译器仍会保持跟踪。
所以在(*pList).val2
中,编译器知道要向pList
添加 4 个字节,然后再取接下来的 4 个字节。
请注意,编译器通常对此类数学很有帮助。 pList+1
不添加 1 个字节,而是1 * sizeof(list_entry)
。
你说的对。 *pList
应该为您提供存储在pList
中的地址的值。 但是值的类型是list_entry
。 *pList
为您返回一个list_entry
类型的值,并且(*pList).val2
是该list_entry
中的val2
字段。
现在,如果您将*pList
中的值作为int
读取,那么您将获得字段val
的值。
例如*((int*)pList)
TLDR: *pList
确实返回存储在pList
中的地址的值,但值的类型由*pList
的类型决定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.