# include <stdio.h>
# include <stdlib.h>
void init_arr(struct Arr * parr, int length);
bool is_empty(struct Arr * parr);
void show_arr(struct Arr * parr);
struct Arr
{
int * pBase; //所存储的是数组的第一个元素的地址
int len; //数组所能容纳的元素的最大个数
int cnt; //当前数组有效元素的个数
/*int incement;//自动增长因子,什么是自动增长因子,比如,有个数组长度为5,
当数组元素个数为5后,满了后再输入一个元素,就需要内存为其扩充一个,满了后再扩充一个,
但这样麻烦又耗时,于是引入了自动增长因子,当数组满了后,内存不再为其只是扩充一个,而可能是多个,
比如是整数倍个,这样虽然占用空间大了。但是相比较之前的,速度快,方便,这里只是提及,暂时不考虑,
因为要用到动态内存扩充函数allocte(),很复杂*/
};
int main(void)
{
struct Arr arr;//定义了一个变量arr,此时数组还未初始化,数组中是垃圾数字,不是一个有效数组,
//我们要做的就是,让它内部的各种类型有正确合适的表向,比如让pBase,指向一个正确的数组首元素地址,
// 给他赋予长度等等.....
init_arr(&arr, 6);
//printf("%d\n", arr.len);
show_arr(&arr);
system("pause");
return 0;
}
void init_arr(struct Arr * parr, int length)
{
parr->pBase = (int *)malloc(sizeof(int) * length);
//(*parr).len = 99;
if(NULL == parr->pBase) //内存分配是否成功,若是失败的话(由于内存已用尽),
// 会将NULL全部赋给parr所指向的变量,malloc函数在操作系统的允许下开辟了length * sizeof(int)多的字节,
// pBase中存放了分配地址的第一个字节,pBse+1就会指向第二个元素(呵呵,自己想吧,说起来很慢很复杂)
{
printf("动态内存分配失败!\n");
exit(-1); //表示终止整个程序,需要stdio.h这个头文件
}
else
{
parr->len = length;//完成初始化,
parr->cnt = 0;//因为是空数组,所以有效位数为0
}
return ; //return语句用来表示该子程序完成,用来向用户展示,给予方便
}
/*接下来是用函数实现数组的输出,
在其中需要用bool is_empty()函数来判断是否为空,
if(数组为空),则提示用户数组为空,
else,则输出数组的有效内容*/
bool is_empty(struct Arr * parr)
{
if(parr->cnt == 0) //当然是有效位判断啦!
return true;
else
return false;
}
/*输出*/
void show_arr(struct Arr * parr)
{
int i;
if(is_empty(parr))
{
printf("数组为空!\n");
}
else
{
for(i=0; i<parr->cnt; ++i); //i从0开始,i小于有效位数,然后循环输出
printf("%d ", parr->pBase[i]);
}
}
/***************************
我了个擦,仅仅是一个初始化,就要了小爷的命了。这尼玛设计的东西真多,好吧,
主要是初始化函数,输出函数以及bool函数的嵌套使用,要注意malloc分配内存的问题,尤其是
malloc函数分配内存成功与否(用if(NULL == parr->pBase)来判断),要与初始化来相联系使用,
当这个等式成立的话,就可以说明,动态分配内存不成功,这样的话只能输出“动态分配内存失败”,
exit(-1),退出整个程序;若等式不成立,说明动态内存分配成功,可以进行初始化,
初始化完毕后,就需要输出,这个时候需要用bool is_empty()函数来判断,若是空,则返回true,
不是的话则返回flase,然后这个函数要被输出函数void show_arr(struct Arr * parr)拿去来判断数组是否为空,
为空的话就输出“该数组为空”。不为空的话就输出该数组各项。用if...else语句判断,用for循环输出,
for(i=0;i<cnt;++i)
{printf("%d ", parr->pBase);}
卧槽。头大了。这个东西真是烧脑子
*************************/