#include <stdlib.h>
int main()
{
int num,*p=0,i
printf("输入数组元素个数:")
/*输入数组元素个数,保存到变量num中*/
scanf("%d",&num)
/*动态分配数组存储空间*/
p = (int *)malloc(sizeof(int)*num)
/*输入数据*/
for(i=0i<numi++)
{
scanf("%d",&p[i])
}
/*输出数据*/
for(i=0i<numi++)
{
printf("%d ",p[i])
}
/*删除动态创建的数组*/
free(p)
return 0
}
1定义指针。
2
使用malloc函数分配内存。
3
对数组进行访问即可。
对于一维动态数组,直接定义一维指针,并分配内存空间即可。
比如int类型的10个元素动态数组,写作
int
*a
a
=
(int
*)malloc(sizeof(int)
*
10)
如果是多维数组,需要从高维向低维逐层分配。如二维数组10*100空间。
int
**a
int
i
a
=
(int
**)
malloc(sizeof(int
*)
*
10)
//
先分配10个int*的空间。
for(i
=
0
i
<
100
i
++)
a[i]
=
(int
*)malloc(sizeof(int)
*
100)
//
对于每个int*,分配100个元素的空间。
第一个问题malloc()函数是申请堆内存的函数,括号内参数是内存大小,单位是字节数。函数返回的是void类型的指针,所以在赋值给int类型的指针pArr时要进行强制转换。因为malloc本来返回的就是指针,指向内存空间的首地址,用不着再前面加&。
第二个问题
i和for括号里的i是相同的,这是个for循环,循环len次,然后需要你自己输入len个值,存储在pArr[i]中。每次循环i都自加1,是不相同的。
for循环括号内第一句 i=0 是将整数 i 赋值为0;
然后第二句是判断语句,判断 i<len 是否为真,如果为真,就执行下面的scanf语句,输入值。输入完成后执行第三句 i = i+1,然后执行第二局进入下一轮判断 。若是 i<len 为假,则跳出for循环,执行下面的printf语句