當前位置:網站首頁>地址的地址?

地址的地址?

2022-01-27 12:06:08 encoder_b

在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  可能連續定義時會穿插其他字節

 

版權聲明
本文為[encoder_b]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201271206081597.html

隨機推薦