c语言 动态数组

Python012

c语言 动态数组,第1张

#include <stdio.h>

#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语句