C语言中struct类型的内存和地址?
Memory and adress of struct type in C Language?
1.background
尽管我发现 C 中的 build-in 类型与结构类型类似,但我发现有些不同。
不懂汇编语言
2.Test代码
// @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.Picture
3.question
为什么ints_list站着那个记忆
编译时ints_list是否在变量table中?
ints_list
不是结构的地址,&ints_list
是 - 您的第一个 printf
调用未定义的行为。
structs
可以按值传递,并且将一个伪装成指针传递给 printf
(根本不知道应该如何打印您的结构)会产生垃圾输出。
尽管我发现 C 中的 build-in 类型与结构类型类似,但我发现有些不同。
不懂汇编语言
// @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.Picture
为什么ints_list站着那个记忆
编译时ints_list是否在变量table中?
ints_list
不是结构的地址,&ints_list
是 - 您的第一个 printf
调用未定义的行为。
structs
可以按值传递,并且将一个伪装成指针传递给 printf
(根本不知道应该如何打印您的结构)会产生垃圾输出。