首页 > 编程语言 > 详细

数组大小的动态分配

时间:2020-11-19 00:21:14      阅读:34      评论:0      收藏:0      [点我收藏+]

1.

技术分享图片

 

 

malloch函数返回的是4个字节中的第一个字节的地址,所以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\n",*p);
16     f(p);//p是int *类型
17     printf("%d\n",*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("请输入数组长度:\n");
   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\n",pArr[i]);
   free(pArr);//释放掉动态分配的数组
   for(i=0;i<len;i++)
       printf("%d\n",pArr[i]);//会输出一堆垃圾值
   return 0; 
}

技术分享图片

 

数组大小的动态分配

原文:https://www.cnblogs.com/ajiaoa/p/14002417.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!