《C语言接口与实现》实验——动态数组(Array_T)

实验程序是用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




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值