1 #include <stdio.h> 2 #include <stdlib.h> 3 void freem(int* p){ 4 #include <stdio.h> 5 #include <stdlib.h> 6 void update_value(int* p){ 7 *p = 100; 8 } 9 int main(){ 10 int a=10;//在棧上面分配變量a 占4個字節 int *p = (int*)malloc(sizeof(int));//申請類型是int內存空間;占4個字節;p指針指向該4個字節的內存空間 11 //p變量也占4字節;所以sizeof(p)=8個字節 12 *p = 50;//賦值p只指向的動態空間為50 13 printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a)); 14 free(p);//修改p指向的內存中的數據 15 printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a)); 16 update_value(p); 17 printf("p->value=%d &p=%p sizeof(*p)=%ld, sizeof(p)=%ld sizeof(a)=%ld \n", *p, p, sizeof(*p), sizeof(p),sizeof(a)); 18 19 return 0; 20 }
int *p = (int *)malloc(sizeof(int))
malloc函數會返回開辟空間的首地址,加(int *)的目的是讓計算機知道,如何去划分這個開辟的空間,
因為char、int 、long這些類型的字節大小是不一樣的,我們知道了首地址,
還要知道是以幾個字節為單元。
所以,這句話一共開辟了8個字節(某些計算機上),這也是為什么我寫sizeof(int),而不是直接寫4的原因。