如何解决结构和指针的行为
在SoloLearn应用中进行测验时,我遇到了特定的代码。
#include <stdio.h>
struct node{
int a,b,c;
};
int main()
{
struct node num = {3,5,6};
struct node *ptr = #
printf("%d\n",*ptr);
printf("%d\n",*((int*)ptr + 1 + (3-2)));
return 0;
}
在打印3
和6
的结果中我得到了正确的答案,但是我不确定我是否理解 struct语句和指针功能正确。
以下步骤是我理解代码工作原理的方式。
-
由于
struct node
,在a,c
变量中的num
中设置了数字3、5、6。 -
*ptr
指向由于struct node *ptr = #
而导致的num的第一个地址,这意味着它指向索引= 0的地址,该地址在{3,5中为3
6}。 -
因此,
printf("%d\n",*ptr);
打印3
, -
printf("%d\n",*((int*)ptr + 1 + (3-2)));
正在打印* (0 + 1 + 1),它是num
的索引= 2,等于6
。>
这是对的吗
解决方法
是的,但是请允许我调整您的术语。特别是,对我而言,使用短语“ index”似乎有点不合理,因为我们不是在谈论数组。我还将分解您的观点4,以更明确地说明那里发生的事情。
- 由于初始化程序的缘故,在num变量中将3、5、6设置为a,b,c。 由于
-
struct node *ptr = #
指向num的起始地址,该地址与num.a
的地址相同。 - 因此,
printf("%d\n",*ptr);
打印3张。 -
(int*)ptr
产生一个指向num.a
的正确类型的指针。 - 在
ptr
中加2表示我们将两个整数的大小添加到地址中。请注意,类型转换非常重要,因为否则我们会在地址中添加两个struct node
的大小;添加到指针的效果取决于指针的类型。 - 结果地址与
num.c
的地址相同。在该地址,我们发现整数值为6。
ptr
,版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。