【发布时间】:2019-08-01 12:10:53
【问题描述】:
从家庭作业中得到这段代码。我应该弄清楚&y[0] == &x.a 的价值是多少。顺便说一句,很抱歉没有正确格式化,我尽力了。
所以我的方法是; y[0] = 1,&y[0]表示1的地址,也就是数组中的0?
x.a 最让我困惑。这是否意味着结构 x 的元素 a?所以x.a == 1?它的地址也是0?所以布尔值会显示为true(1),因为0 == 0。但是解决方案说它是错误的,但是为什么呢?
struct my_struct {
int a;
double b;
int c;
};
my_struct x = { 1, 2, 3 };
int y[] = { 1, 2, 3 };
我期待输出1,但显然是0,但为什么呢?
【问题讨论】:
-
a未初始化。这可能是解决方案返回 false 的原因。a的值基本上是随机的。 -
x和y是两个不同的对象,你为什么希望它们存储在同一个地址?是不是&让你感到困惑? -
您在此处比较地址,因此比较两个不同的变量将始终返回
false。 -
为什么你会期望两个不同变量的地址相同? struct
x和数组y都在堆栈上分配,因此将各自获得自己的堆栈内存。 -
除非它们都是联合体的成员,否则
my_struct的实例不会与int数组的任何元素共同占用任何内存。所以&y[0] == &x.a应该比较假(即 0)。您对两者使用相同的初始化程序{1, 2, 3}的事实无关紧要 - 编译器使用该数据初始化x和y,但这不会影响x(或其成员)或y(或其元素)在内存中。