在visual studio 2019中
#include <stdio.h>
#include <stdlib.h>
typedef struct student {
int value;
struct student* next_stu;
}Student;
Student * creatlist();
void insertlist(Student * list,int value);
int main() {
Student *my_list=creatlist();
Student *my_list2=creatlist();
//insertlist(my_list,10);
//printf("%d\n", sizeof(Student));
//printf("%d", sizeof(Student*));
double bbb = 20;
double* pp = &bbb;
int b = 10;
int bb = 20;
int *a=&b;
int** c = &a;
printf("%x\n", pp);
printf("%x\n", &pp);
printf("%x\n", &b);
printf("%x\n", &bb);
printf("%x\n", a);
printf("%x\n", &a);
printf("%x\n", &c);
printf("%x\n", my_list);
printf("%x\n", &my_list);
printf("%x\n", my_list2);
printf("%x\n", &my_list2);
printf("%d\n", sizeof(int*));
printf("%d\n", sizeof(double*));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(double));
//数的地址和它的地址的地址连续 占用大小一致
//我的电脑中 double和int 地址与地址的地址都间隔12 结构体地址之间56 地址的地址之间12
// 而实际占用 任何的类型包括结构体 地址都是4,double变量是8,结构体看存的数据量
//
//后创建的 地址更小 ? 对于int double创建一个地址时,会自动在更小的地方创建地址的地址,该地方已经有值时,会在更更小的地方创建地址的地址
//结构体的地址的地址与int double在同一块 往前间隔16创建 (如果创建两个, 第一个间隔16+12, 第二个间隔16 )
//结构体的地址在其他地方
return 0;
}
Student * creatlist() {
Student* headline = (Student*)malloc(sizeof(Student));
headline->value = 0;
headline->next_stu = NULL;
return headline;
}
void insertlist(Student* list, int value) {
Student* stu = (Student*)malloc(sizeof(Student));
stu->value = value;
stu->next_stu = list->next_stu;
list->next_stu = stu;
}
补充 直接定义数组是每个都间隔4 而且向后存放的
连续定义则间隔不是4 可能连续定义时会穿插其他字节