Skip to content

Instantly share code, notes, and snippets.

@junxie6
Forked from matugm/array.c
Created May 11, 2021 04:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save junxie6/6e65fa7a1de58ccb9f3c374b81a16d48 to your computer and use it in GitHub Desktop.
Save junxie6/6e65fa7a1de58ccb9f3c374b81a16d48 to your computer and use it in GitHub Desktop.
dynamic arrays in c
#include "array.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
struct ArrayData *initArray() {
struct ArrayData *newArray = malloc(sizeof(struct ArrayData));
newArray->pointer = calloc(1000, sizeof(int));
newArray->size = 1000;
newArray->counter = 0;
return newArray;
}
void resizeArray(struct ArrayData* array) {
int newSize = (array->size * sizeof(int)) * 2;
array->pointer = realloc(array->pointer, newSize);
fflush (stdout);
array->size *= 2; // This is the number of elements, don't multiply by sizeof
}
int addElement(struct ArrayData *array, int number) {
if (array->counter >= array->size) {
resizeArray(array);
}
*(array->pointer + array->counter) = number; // Pointer arithmetic
array->counter += 1;
return 0;
}
int getElement(struct ArrayData *array, int index) {
if (array->counter >= array->size) {
return -1;
}
int *data = array->pointer + index;
return *data;
}
#ifndef ARRAY_H_
#define ARRAY_H_
struct ArrayData *initArray();
int addElement(struct ArrayData *array, int number);
int getElement(struct ArrayData *array, int index);
struct ArrayData {
int *pointer;
int counter;
int size;
};
#endif /* ARRAY_H_ */
#include "array.h"
#include <stdio.h>
#include <stdlib.h>
int main() {
struct ArrayData *array;
array = initArray();
int get;
int i;
for (i = 0; i < 5000; i++) {
addElement(array, rand() % 50000);
get = getElement(array, i);
printf("%d\n", get);
}
free(array->pointer);
free(array);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment