C语言malloc的用法及详解

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

 

posted @ 2018-03-14 18:12  王默默  阅读(16175)  评论(0编辑  收藏  举报