zoukankan      html  css  js  c++  java
  • 数组大小的动态分配

    1.

    malloch函数返回的是4个字节中的第一个字节的地址,那为什么要加强制类型转换呢,是因为根据第一个字节地址,可以把8个字节当一个变量也可以把4个字节当一个变量,所以malloc函数返回的是一个无意义的地址也就是干地址,所以需要告诉编译器我们返回的是哪种类型的地址,把第一个字节地址当成一个整形字节地址;所以p存储的是首字节地址1000H

    但因为前面有强制类型转换,所以转换成了int *类型,因此p指向前4个字节

    *p(含义是以p的内容为地址的变量),代表这四个字节整体,所以自然可以把10赋给这4个字节。

     2.

     1 #include<stdio.h>
     2 #include<malloc.h>
     3 //2020年11月18日21:10:16
     4 void f(int * q)
     5 {
     6   *q=200;  
     7   //free(q);
     8   //把q所指向的内存释放掉,不能用在这,因为q所指向的和p所指向的是同一块内存空间,
     9   //释放掉以后16行的*p会出现错误(因为空间不存在了)  
    10 }
    11 int main(void)
    12 {
    13     int * p=(int *)malloc(sizeof(int));//sizeof(int)返回值是int所占的字节数4
    14     *p=10;
    15     printf("%d
    ",*p);
    16     f(p);//p是int *类型
    17     printf("%d
    ",*p);
    18     return 0;
    19 }


    3.


     4.

    #include<stdio.h>
    #include<malloc.h>
    //2020年11月18日21:43:35
    int main(void)
    {
       int a[5];// 如果int占4字节,则本数组总共占20字节
       int len;
       int * pArr;
       int i;
       
       //动态的构造一维数组
       printf("请输入数组长度:
    ");
       scanf("%d",&len);
       pArr=(int *)malloc(4*len);//所以本行构造了一个动态的一维数组,其功能类似于int pArr[len]
       //因为malloc返回的是20个字节中的第一个字节的地址,
       //因为前面有强制类型转换成了int *类型,所以pArr指向前4个字节
       //所以*pArr代表了前四个字节的内容,
       //pArr+1指向第二个四个字节
       //所以*(pArr+1)代表了第二个四个字节的内容
       /////*pArr等价于pArr[0],*(pArr+1)等价于pArr[1]////
       
       //对一维数组进行操作:赋值
       for(i=0;i<len;i++)
           scanf("%d",&pArr[i]);
       //对一维数组进行输出
       for(i=0;i<len;i++)
           printf("%d
    ",pArr[i]);
       free(pArr);//释放掉动态分配的数组
       for(i=0;i<len;i++)
           printf("%d
    ",pArr[i]);//会输出一堆垃圾值
       return 0; 
    }


     1 #include<stdio.h>
     2 #include<malloc.h>
     3 int main(void)
     4 {
     5     int a[5]={1,2,3,4,5};
     6     
     7     int len;
     8     printf("请输入你需要分配的数组长度:len=
    ");
     9     scanf("%d",&len);
    10     int * pArr = (int *)malloc(sizeof(int)*len);
    11     //pArr指向了前四个字节,pArr+1指向后四个字节
    12     * pArr = 4;//类似于a[0]=4;可以把pArr当数组名处理
    13     pArr[1] = 10;//等价于* (pArr+1) = 10;
    14     free(pArr);
    15     
    16     return 0;
    17 }
  • 相关阅读:
    使用javamail发信过程中的一些问题及解决方法
    互联网标准
    发送邮件报错javax.activation.UnsupportedDataTypeException: no object DCH for MIME type text/plain; charset=UTF-8
    在用split分割处理csv数据时,使用不包含在双引号中的逗号进行分割
    java 网络代理官方资料
    ORA-28000错误的原因及解决办法
    日文软件下载站点
    Azure 入门
    ElasticSearch 5学习(10)——结构化查询(包括新特性)
    ElasticSearch 5学习(9)——映射和分析(string类型废弃)
  • 原文地址:https://www.cnblogs.com/ajiaoa/p/14002417.html
Copyright © 2011-2022 走看看