繁体   English   中英

指向结构的指针上的点运算符

[英]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。 不要担心确切的细节,这是编译器的工作。 如果在valval2之间插入一个成员,一切都会移动,但编译器仍会保持跟踪。

所以在(*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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM