问题描述
1.背景
-
虽然我发现 C 中的内置类型的工作方式类似于结构类型,但我发现了一些不同的东西。
-
不懂汇编语言
// @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
(它不知道您的结构应该如何打印)伪装成一个指针会产生垃圾输出。