指针与malloc函数
一般定义完指针后系统不会为它将指向的变量分配内存空间,
故我们要用到malloc函数为它分配动态内存。
比如我们用指针定义一个数组,如果用malloc函数就用,是存在问题的。
现在我们通过对比一下指针定义数组与原始定义数组来看看指针与malloc函数的密切关系
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i;
double nums2[4];//以前的纯数组方法 定义数组
double *nums; //当你不知道几个字节的时候:double *nums=(double *)malloc(sizeof(double) * 4) 其中4为你希望数组包含的元素个数
nums=(double *)malloc(32);//现在的指针得到数组:double的bit为8位,动态分配存储空间给了32/8共4个存储double型数的空间,得到含4个数的double型数组
for(i=0;i<4;i++)//这里先用新方法打印数组
{
printf("请输入第%d个元素:", i+1);
scanf("%lf", nums+i);
}// calloc的用法:num=(double *)calloc(4, sizeof(double));这里的4为同理 但是都要free(); //calloc其他数如同传统方法会初始化为0,而malloc不会
printf("数组元素为:\n");
for(i=0;i<4;i++)
{
printf("%.2lf\t", *(nums+i));
}
for(i=0;i<4;i++)//现在用传统方法打印
{
nums2[i]=*(nums+i);
}
printf("\n第二次打印数组元素:\n");
for(i=0;i<4;i++)
{
printf("%.2lf\t", nums2[i]);
}
free(nums);
//观察到结果是一样的
//用新方法的好处:可以释放动态分配的内存,我们一般用传统方法
return 0;
}
在实际应用中,对于字符串这样特殊的数组,我们用指针定义它时常常用到malloc函数。