C语言:动态内存分配

来源:百度知道 编辑:UC知道 时间:2024/09/24 20:26:11
#include<stdio.h>
#include<malloc.h>
int main()
{int btc,*p1;
p1=(int *)malloc(10*sizeof(int));

for(btc=0;btc<10;++btc)
scanf("%d",&p1[btc]);
printf("\n");
for(btc=0;btc<10;++btc)
printf("%d",p1[btc]);
}我没定义数组为什么还可以像数组那样输出
我没定义数组为什么还可以像数组那样输入输出

1.p1=(int *)malloc(10*sizeof(int)); //malloc 函数将会在动态存储区中分配一个长度为 10*sizeof(int)的 <连续> 空间。 而且p1的值是 分配域的起始地址;这就有一点像数组名了。

2.例如 int temp[10]; int *ptemp; ptemp=temp; //得到数组的首地址。
这样 ptemp 就可以 引用 数组的元素了。比如 ptemp[i];
当然 这是 固定分配内存的。

3.scanf("%d",&p1[btc]); 和 printf("%d",p1[btc]);
这两个函数 中 p1 的作用 就 是相当于数组名。 引用动态的数组。

p1=(int *)malloc(10*sizeof(int));就是生成了一个动态数组啊

而且C语言里p[x]实际上就等价于*(p+x),只要p是指针类型的变量,不管它是数组,还是其他什么,都不会报错

malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上
p1=(int *)malloc(10*sizeof(int))相当于生成了一个动态数组,其长度可待定。
p1是一个指向一连续内存块的指针。malloc申请时就相当于定义了一个指针,长度只是待定的,指针指向首地址。在一定长度下,这与数组的存储分配是一致的,因此可以像数组那样输入输出。

下标操作符是对原始地址做指针偏移,是从汇编里延续下来的写法。