c - 结构..有人能弄清楚吗?

标签 c pointers structure

为什么p->p1产生1,而s2.p1产生0?它们都指向完全相同的东西,而 p->p2 和 s2.p2 不会发生这种情况。

#include<stdio.h>
#include<stdlib.h>

struct S1{
    int p1, p2;
};
struct S2{
    int p1;
    struct S1 s1;
    int p2;
};

int main (void){
    int s = 0;
    struct S2 s2 = {1,2,3,0};
    struct S2 *p;
    p = (struct s2 *)malloc(sizeof(struct S2));

    *p = s2;


    s2.p1 = 0;
    printf("p->p1 %d,s2.p1 %d   \n\n",p->p1, s2.p1 );
    printf("%d\t %d\t %d\t %d\t %d\n",p->p1 , s2.p1 , p->p2 , p->s1.p2 );
    s = p->p1 + s2.p1 + p->p2 + p->s1.p2;

    free(p);
    printf("%d", s);
    return 0;
    }

最佳答案

因为你将s2的内容复制到p指向的结构中,然后更新了s2的内容。

关于c - 结构..有人能弄清楚吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50611904/

相关文章:

c - fatal error : open. h:没有这样的文件或目录

c - Mac OS X Lion Radiotap header 和 libpcap

c++ - 将 “Extension methods support” 添加到 C++ 的错误指针分配技巧将来会成为问题吗?

c - 增加带有 Realloc 的结构的大小(第二次增加时出错)

c# - 自定义类框架/结构

c - 如何使用C中的指针在结构类型数组中获取字符串输入

c - Numpy Like Arrays for C

c - 通过引用传递 C 指针?

pointers - 将值推送到指针向量具有垃圾值

c - 读取位宽数据的等效方法