如何像访问数组一样通过指针访问结构体的成员?
How to access the members of structure through pointers same as we access array?
我在模拟测试中遇到了一个问题,它不是 IDE 中的 运行,但我无法理解测试中给出的那段代码背后的概念。
printf (“%c, %c”, *( (char*) q + 1) , *( (char*) q + 2) ) ;
这里指向 struct q 的指针如何使用数字访问指针的成员。
这里是link代码
如果 q
是指向任何对象类型的指针,则将其转换为字符类型提供了一种访问所指向对象的表示形式的字节的方法(如果有的话)。但是,如果 q
是指向结构类型的指针,那么您提供的代码不会访问成员 本身 。虽然结构类型实例的表示包括所有结构成员的表示,但 (char*) q + 1
不是选择成员,而是 byte (以指针的形式到那个字节)——从结构开头偏移量为 1 的那个。该字节可以是第一个成员的一部分(从偏移量 0 开始)、第二个成员的一部分或不属于任何成员。
假设 (char*) q + 1
是指向对象 *q
开头偏移量 1 处的字节的指针,并且 *q
的大小至少为两个字节,表达式 *( (char*) q + 1)
评估该字节的值。相当于((char *)q)[1]
.
在 c 中,结构成员只是内存 space 映射到该结构定义。具有三个字符的结构表示映射到此结构的 3 个字节 space。
q 是一个指针。所以 q + 1
意味着一个地址转发到基本结构地址
(char*)
表示这不再是结构这是一个字符指针
*( (char*) q + 2) )
或简单的 *x 表示取消引用指针,因此获取 char 值。
有一些例外(如果不是所有成员都是同一类型)检查
Structure padding and packing
我在模拟测试中遇到了一个问题,它不是 IDE 中的 运行,但我无法理解测试中给出的那段代码背后的概念。
printf (“%c, %c”, *( (char*) q + 1) , *( (char*) q + 2) ) ;
这里指向 struct q 的指针如何使用数字访问指针的成员。
这里是link代码
如果 q
是指向任何对象类型的指针,则将其转换为字符类型提供了一种访问所指向对象的表示形式的字节的方法(如果有的话)。但是,如果 q
是指向结构类型的指针,那么您提供的代码不会访问成员 本身 。虽然结构类型实例的表示包括所有结构成员的表示,但 (char*) q + 1
不是选择成员,而是 byte (以指针的形式到那个字节)——从结构开头偏移量为 1 的那个。该字节可以是第一个成员的一部分(从偏移量 0 开始)、第二个成员的一部分或不属于任何成员。
假设 (char*) q + 1
是指向对象 *q
开头偏移量 1 处的字节的指针,并且 *q
的大小至少为两个字节,表达式 *( (char*) q + 1)
评估该字节的值。相当于((char *)q)[1]
.
在 c 中,结构成员只是内存 space 映射到该结构定义。具有三个字符的结构表示映射到此结构的 3 个字节 space。
q 是一个指针。所以 q + 1
意味着一个地址转发到基本结构地址
(char*)
表示这不再是结构这是一个字符指针
*( (char*) q + 2) )
或简单的 *x 表示取消引用指针,因此获取 char 值。
有一些例外(如果不是所有成员都是同一类型)检查 Structure padding and packing