#include<stdio.h>
#include<malloc.h> //包含了malloc函数
#include<stdlib.h> //包含了exit函数
struct Arr
{
int *pBase; //存储数组第一个元素的地址
int len; //数组所能容纳的最大元素的个数
int cnt; //当前数组有效元素个数
};
void init_arr(struct Arr *pArr,int length); //初始化数组
void show_arr(struct Arr *pArr); //展示
int main(){
struct Arr arr;
init_arr(arr);
show_arr(&arr);//将arr的地址赋给形参
return 0;
}
void init_arr(struct Arr *pArr,int length){
pArr->pBase=(int*)malloc(sizeof(int)*length);//为其分配内存
//此时分配的有24个字节,但是只是把第一个字节赋给pBase
if(NULL==pArr->pBase){
printf("动态内存分配失败\n");
exit(-1);//终止整个程序
}
else{
pArr->len=length;
pArr->cnt=0;
return ;
}
}
bool is_empty(struct Arr *pArr){//接收结构体变量的地址【3】
if(0==pArr->cnt)
return true;
else
return false;
}
void show_arr(struct Arr *pArr){//【1】
if(is_empty(pArr)){//&pArr是取地址,但是传到show_arr中的pArr已经是地址了,所以不用再加取地址符号了。
printf("数组为空!\n");
}else{
for(int i=0;i<pArr->cnt;++i)
// 【2】 printf("%d ",pArr[i]);不可以这样写
printf("%d ",pArr->pBase[i]);
printf("\n");
}
}
运行结果如下:
image.png
【1】:main函数调用show_arr函数,show_arr函数调用is_empty函数
【2】:因为pArr是结构体的变量的地址,所以不可以这样写,如果pArr是数组名,那么就可以这样写。
【3】:如下代码也可以判断数组是否为空,但是没有实际意义,他的意思的判断整型i是否为0,该函数的目的是判断数组是否为空,所以应该传过去一个数组比较好
bool is_empty(int i){
if(0==i)
return true;
else
return false;
}
网友评论