Skip to content

Instantly share code, notes, and snippets.

@JackYang-hellobobo
Last active January 10, 2024 17:11
Show Gist options
  • Save JackYang-hellobobo/f9b3b7b5537f231e69e8c87f4fe9dd52 to your computer and use it in GitHub Desktop.
Save JackYang-hellobobo/f9b3b7b5537f231e69e8c87f4fe9dd52 to your computer and use it in GitHub Desktop.
Resizeable Array

C语言 可变数组

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct{
	int* array;
	int size;
}Array;

//Interface
Array array_create(int init_size);

void arrar_free(Array *a);

int array_get(Array* a,int index);

void array_set(Array* a,int index,int num);

int array_size(const Array& a);

int* array_at(Array* a,int index);

void array_inflate(Array* a, int more_size);

//Main Functions 
int main(void){
	Array a = array_create(10);
	array_set(&a,5,6);
	array_set(&a,6,array_get(&a,5));
	
//	*(array_at(&a,6))=10;
//	*(array_at(&a,9))=*(array_at(&a,6));
	for(int i=0;i<a.size;i++){
		printf("%d ",a.array[i]);
	}
	return 0;
}
//Function implementation
Array array_create(int init_size){
	Array a;
	a.array=(int*)calloc(sizeof(int),sizeof(int)*init_size);
	a.size = init_size;
	return a;
}

void arrar_free(Array *a){
	free(a->array);
	a->size=0;
}

int array_size(const Array& a){
	return a.size;
}

int* array_at(Array* a,int index){
	if(index>a->size){
		array_inflate(a,index-a->size);
	}
	return &(a->array[index]);
}

void array_inflate(Array* a, int more_size){
	int* p = (int*)calloc(sizeof(int),sizeof(int)*(a->size+more_size));
	memcpy((void*)p,(void*)a->array,(a->size)*sizeof(int));
	for(int i=0;i<a->size;i++){
		p[i] = a->array[i];
	}
	free(a->array);
	a->array=p;
	a->size=a->size+more_size;
}

int array_get(Array* a,int index){
	return a->array[index];
}

void array_set(Array* a,int index,int num){
	a->array[index]=num;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment