【发布时间】:2013-09-08 21:16:02
【问题描述】:
浏览一些旧的 C 代码,我遇到了这个 sn-p。我对幕后发生的事情感到非常困惑。
我对struct指针的用法和可操作性没有完全了解,也不太明白下面的代码是如何存储和访问内存的。
struct x{
int i1;
int i2;
char ch1[8];
char ch2[8];
};
struct y{
long long int f1;
char f2[18];
};
int main(void)
{
struct x * myX;
struct y * myY;
myX = malloc(sizeof(struct x));
myX->i1 = 4096;
myX->i2 = 4096;
strcpy(myX->ch1,"Stephen ");
strcpy(myX->ch2,"Goddard");
myY = (struct y *) myX;
printf("myY->f1 = %d\n", myY->f1);
printf("myY->f2 = %s\n", myY->f2);
}
这个输出
myY->f1 = 4096
myY->f2 = Stephen Goddard
转换后,i1 存储到 myY->f1 中,ch1 和 ch2 都存储在 myY->f2 中。我的问题是如何?。演员表后的记忆内容是什么样的?
我知道这与结构的大小和指针指向的位置有关(显然),但是在查看这段代码之后,它确实让我意识到我缺乏对指针的理解。
谢谢
【问题讨论】:
-
第一个
strcpy调用也调用了未定义的行为,因为它覆盖了一个不存在的数组元素,即ch1[8]。