zoukankan      html  css  js  c++  java
  • 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 
    ", *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的原因。

  • 相关阅读:
    Postman使用
    Java-性能调优-理解GC日志
    Java-性能调优实战(jps、jstack)
    Java-性能调优工具-jstat
    Java-内存模型
    生产者消费者JAVA实现
    Java-GC垃圾收集器
    JAVA-JVM垃圾回收算法
    Java线程状态流转---线程
    【洛谷5072】[Ynoi2015] 盼君勿忘(莫队)
  • 原文地址:https://www.cnblogs.com/wanglijun/p/8569250.html
Copyright © 2011-2022 走看看