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 ", *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 ", *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 ", *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的原因。