动态一维数组的构造
这个简单的程序可以很好地帮助理解指针的知识和动态内存分配的知识。
源代码
# include <stdio.h>
# include <malloc.h>
int main(void)
{
int len; //要构造一个数组,首先需要定义好数组的长度;
// int * pArr; //接着这里可以理解为是定义数组名 ; a[5]; 其中a这个数组名就是存放的数组第一个元素的地址。这里同理。
int i;
printf("输入你要定义数组的长度:");
scanf("%d", &len);
int * pArr = (int *)malloc(sizeof(int) * len);//12行;这里不能只写一个len,len是数组的长度,但数组所占字节,应该乘上相应的数据类型,例如这里是int类型,就是sizeof(int) * len
//对数组进行赋值
for (i=0; i<len; i++)
{
printf("输入第%d个元素:",i);
scanf("%d", &pArr[i]);
}
//操作数组:显示输出
printf("你构造的数组如下:\n");
for (i=0; i<len; i++)
printf("%d\n", pArr[i]);
free(pArr); //手动释放内存;
return 0;
}
在vc++6.0环境下运行结果如下
输入你要定义数组的长度:
5
输入第0个元素:1
输入第1个元素:55
输入第2个元素:-6
输入第3个元素:326
输入第4个元素:55
你构造的数组如下:
1
55
-6
326
55
总结
int * pArr;
pArr = (int *)malloc(sizeof(int) * len);
上面这两句等价于下面这句
int * pArr = (int *)malloc(sizeof(int) * len);
效果如同:
int a;
a = 5;
等价于
int a = 5;
int *是一个整体,int * p代表定义了, 一个只能存放整形数据类型地址 的指针变量,变量名为p 2. 第12行用 sizeof(int) * len; 作为malloc的实参, 而不用4 * len 是因为这样程序移植性更强(不同环境下int类型所占字节数不一定都是4个字节) 3. 第12行如果实参写错,例如只写了一个len(数组长度),忘记乘上对应字节数, 在语法上没错误,但是在程序运行时会出错,因为出现了越界。
|