欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【创】可变数组——的一些东西【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()


相关标签: C语言 C语言