实验程序是用vc6编译,一定注意文件扩展名为c,不是cpp,下载前面几个测试程序(链表、表、原子中有下载链接)中直接将下面源程序覆盖1.c的内容即可!
源程序如下:
#include <stdio.h>
#include <stdlib.h> //rand函数使用
#include <string.h>
#include "include/array.h"
#pragma comment(lib, "libcii.lib")
//产生一个[M, N]区间上的随机数
int my_rand(int M,int N)
{
return (int)((double)rand()/(double)RAND_MAX*(N-M+1)+M);
}
//
void Print(Array_T *a, int n)
{
int i =0;
int *ret = 0;
for(i=0; i<n; i++)
{
ret = (int *)Array_get(*a, i);
printf("%d----%d\n", i, *ret);
}
}
void main()
{
//注意:C语言一定要将这些变量声明放在函数的头部
Array_T a1, b1;
int i = 0;
int val = 0;
//初始化创建
a1 = Array_new(10, sizeof(int));
//填充10个数据
for (; i<10; i++)
{
val = my_rand(1000, 9999);
Array_put(a1, i, &val);//这里可以放心传递指针,因为该函数的内容实现是:memcpy将地址上的内容拷贝到内部结构中!!
}
//第一次输出
printf("\n第一次输出输出\n");
Print(&a1, 10);
//改变大小
Array_resize(a1, 20);
//改变大小后,再次输出
printf("\n改变大小后再次输出\n");
Print(&a1, 20);
//长度及大小
printf("\na1 长度 = %d\n", Array_length(a1));
printf("\na1 大小 = %d\n", Array_size(a1));
//拷贝,并输出b1
// 按照书中的说明,下面的调用是正确的,但cii11源码(array.c)有错误!!——Array_copy实现与书上的源码(P122页)也不一致!!
b1 = Array_copy(a1, 10);
printf("\nb1输出\n");
Print(&b1, 10);
}
输出:
1----6072
2----2739
3----8278
4----6265
5----5318
6----4152
7----9063
8----8405
9----7719
改变大小后再次输出
0----1011
1----6072
2----2739
3----8278
4----6265
5----5318
6----4152
7----9063
8----8405
9----7719
10-----842150451
11-----842150451
12-----842150451
13-----842150451
14-----842150451
15-----842150451
16-----842150451
17-----842150451
18-----842150451
19-----842150451
a1 长度 = 20
a1 大小 = 4
b1输出
0----1011
1----6072
2----2739
3----0 <------------------这里有问题!!!是cii11源码的问题!!!
4----0
5----0
6----0
7----0
8----0
9----0
Press any key to continue