通过这个例子可以看出动态创建的数组和静态常见的数组的区别。
/*
动态内存的分配
*/
# include
# include //使用malloc函数,必须引入malloc.h
int main(void)
{
int len;
int i;
printf("请输入元素个数:");
scanf("%d", &len);
/*
使用malloc创建一个动态内存
不同的编译器对int类型给予的字节数不同,使用sizeof(int)可以得到int类型的直接数,
再乘以用户输入的元素个数,就是要动态分配的空间大小。
malloc()返回一个没有数据类型的指针,保存的是第一个存储单元的地址,
需要对其进行强制类型转换(int *)
*/
int * p = (int *)malloc(sizeof(int) * len);
printf("请赋予每个元素对应的值:\n");
//依次输入每一个元素的值
for(i = 0; i
{
scanf("%d", &p[i]);
}
//依次取出每个元素的值,由这两个for循环,也可以知道
// p[i] 和 *(p + i) 是相等的。
for(i = 0; i
{
printf("p[%d]的值为 %d\n", i, *(p + i));
}
//释放掉这个数组
free(p);
printf("free(p)之后的数据:\n");
//数组的值不存在了,证明动态内存可以动态的操作。
for(i = 0; i
{
printf("p[%d]的值为 %d\n", i, *(p + i));
}
return 0;
}
/*
VC++6.0 输出的结果为
==============================
请输入元素个数:3
请赋予每个元素对应的值
1
2
3
p[0]的值为 1
p[1]的值为 2
p[2]的值为 3
free(p)之后的数据:
p[0]的值为 -572662307
p[1]的值为 -572662307
p[2]的值为 -572662307
==============================
结论:
动态内存创建数组的优点
1,不必事先指定元素个数
2,创建的数组,人类可以手动释放
*/