【创】可变数组——的一些东西【MOOC】
程序员文章站
2022-03-05 11:58:35
...
正经的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *array;
int size;
} Array;
Array array_create(int init_size){
Array a;
a.size = init_size;
a.array = (int *)malloc(sizeof(int) * a.size);
return a;
}
//如果是返回一个指针?
Array* array_createeee(Array *a, int init_size)
{
// 但是想想
// 传入的数组是NULL?
// a=NULL?
// 或者是
// a之前是指另一个已经开过的数组?
// 所以 不要返回指针!!!
}
void array_free(Array *a)
{
free(a->array);
a->array = NULL;
a->size = 0;
// 这里 free NULL 和 0 是无害的
}
int array_size(const Array *a)
{
return a->size;
}
int * array_at(Array *a,int index)
{
return &(a->array[index]);
}
//这里返回的是指针
// 因为在main函数里面可以直接对 index上面的数组 进行赋值
// 如果不是指针
// 那么对这个返回的东西就是无意义的
//如果不想这样 可以选择:
int array_get(const Array *a, int index)
{
return a->array[index];
}
void array_set(Array *a, int index, int value)
{
a->array[index] = value;
}
//也可以。
void array_inflate(Array *a, int more_size)
{
int *p = (int*)malloc(sizeof(int)(a->size+more_size));
for(int i=0;i<a->size;i++){
p[i] = a->array[i];
}
free(a->array);
a->array = p;
a->size += more_size;
}
int main(int argc, char *argv[]) {
Array a = array_create(100);
printf("%d\n", array_size(&a));
printf("%d\n", a.size);
*array_at(&a,0) = 10;
printf("%d\n", *array_at(&a, 0));
// 两种printf表示size的方式都可以
// 但是 对于一些复杂的程序
// array_size(&a):相当于是 :封装
int number;
int cnt = 0;
while(1){
//scanf("%d",&number);
//*array_at(&a, cnt++) = munber;
// 上面的两句可以等于下面的一句;
scanf("%d",array_at(&a, cnt++));
}
array_free(&a);
}
emmmmmmmmm~
有这些
Interface :
n. (人机)界面(尤指屏幕布局和菜单) ; 接口; 接口程序; 连接电路; (两学科、体系等的) 接合点,边缘区域;
v. (使通过界面或接口) 接合,连接;
有这些函数:
Array array_create(int init_size); //创造一个数组
void array_free(Array *a); //释放一个数组的内存
int array_size(const Array *a); //这个数组有多少个内存
int * array_at(Array *a,int index); //返回index数组的值
void array_inflate(Array *a, int more_size);//把数组变大
//有一个小技巧:
//先开一个新的界面
//上面 一开始先写
//第一个文件:---------------------------------------------------
//名字:array.h
#ifndef _ARRAY_H_
#define _ARRAY_H_
//然后是:
typedef struct {
int *array;
int size;
} Array;
//然后是 函数的定义 首次出现的:
Array array_create(int init_size);
void array_free(Array *a);
int array_size(const Array *a);
int * array_at(Array *a,int index);
void array_inflate(Array *a, int more_size);
//最后是
#endif
//第二个文件:----------------------------------------------------
//名字:array.c
//把第一个的复制过里:
//变成这样:
//因为struct 是用来注释的:所以把他://
//typedef struct {
// int *array;
// int size;
//} Array;
#include "array.h"
Array array_create(int init_size);
void array_free(Array *a);
int array_size(const Array *a);
int * array_at(Array *a,int index);
void array_inflate(Array *a, int more_size);
//之后就可以开始写函数了
Array array_create(int init_size){
Array a ;
a.size =
}
#include <stdio.h>
typedef struct {
int *array;
int size;
} Array;
//这里不是*Array 因为如果是*的话 之后的调用函数 虽然传入函数可以写的简单些 不用带*好穿入 但是在函数里面 无法直接开出一个array数组进行操作
void array_free()