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

  • 相关阅读:
    SpringBoot中mybatis配置自动转换驼峰标识没有生效
    mybatis-plus-扩展使用
    myabtis-plus使用
    mybatis-plus特性
    Mariadb Galera Cluster 故障快速拉起
    galera集群启动异常问题汇总
    Galera Cluster grastate.dat文件详解
    mongodb配置文件详解
    wsrep配置一览
    MySQL Galera cluster集群常用参数说明
  • 原文地址:https://www.cnblogs.com/wanglijun/p/8569250.html
Copyright © 2011-2022 走看看