微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C语言中struct类型的内存和地址?

如何解决C语言中struct类型的内存和地址?

1.背景
  • 虽然我发现 C 中的内置类型的工作方式类似于结构类型,但我发现了一些不同的东西。

  • 不懂汇编语言

2.测试代码
// @compiler: gcc
// @machine: x64 Windows
#include <stdio.h>

struct IntNode {
    int integer;
    struct IntNode * next;
};

int main() {
    struct IntNode ints_list = {0,0};
    printf("size of IntNode: %d\n",sizeof(struct IntNode));
    printf("Address of ints_list         : %p\n",ints_list);         // 000000000061FE00
    printf("Address of &ints_list        : %p\n",&ints_list);         // 000000000061FE10
    printf("Address of &ints_list.integer: %p\n",&ints_list.integer); // 000000000061FE10
    printf("Address of &ints_list.next   : %p\n",&ints_list.next);    // 000000000061FE18
}
3.图片

3.问题
  • 为什么 ints_list 能承受那段记忆

  • 编译应用程序时ints_list是否在变量表中?

解决方法

ints_list 不是结构的地址,&ints_list 是 - 您的第一个 printf 调用未定义的行为。

structs 可以按值传递,并将一个传递给 printf(它不知道您的结构应该如何打印)伪装成一个指针会产生垃圾输出。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。