#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <time.h>
#define MAX_ROWS 5000
#define MAX_COLUMNS 5000
struct array
{
int rows;
int columns;
int order;
char *base_pointer; /* pointer to array of bytes. In this array, float numbers will be stored (4 bytes each) */
};
struct array* initialize(int rows, int columns, int order)
{
int i,
size = columns * rows * sizeof(float);
/* Allocate the required memory for the 2D array to store float values (Ex: 1.45) with "rows" and "columns" */
// If you want to allocate both the structure and the internal storage in one malloc:
/*
struct array* array = (struct array*) malloc(sizeof(struct array) + size);
array->base_pointer = &((char*)array)[sizeof(struct array)];
*/
struct array
* array
= malloc(sizeof(struct array
)); if(!array) {
return 0; // error
}
array
->base_pointer
= malloc(size
); if(!array->base_pointer) {
return 0; // error
}
for(i = 0; i < size; i++) {
array->base_pointer[i] = 0;
}
/* Make sure the size is within 1 to MAX_ROWS and 1 to MAX_COLUMNS specified in main.c. If not return null pointer */
array->rows = rows;
array->columns = columns;
array->order = order;
/* Initialize the 2D array to the all zeroes (0.0) */
/* Assign suitable values to all the elements of the structure and return the struct pointer */
return array;
}
void insert(struct array* arr, int row, int column, float value) {
float* floatArr = (float*)arr->base_pointer;
floatArr[(column * arr->rows) + row] = value;
}
float retrieve(struct array* arr, int row, int column) {
float* floatArr = (float*)arr->base_pointer;
return floatArr[(column * arr->rows) + row];
}
int main() {
struct array* arr = initialize(3, 4, 42);
int i, row, column;
float f = 0.0;
for(column = 0; column < arr->columns; column++) {
for(row = 0; row < arr->rows; row++) {
insert(arr, row, column, f);
f = f + 1.0;
}
}
// Check the array's fields
printf("arr->rows = %i\narr->columns = %i\narr->order = %i\n", arr
->rows
, arr
->columns
, arr
->order
); // print the array linearly
for(i = 0; i < arr->columns*arr->rows; i++) {
printf("((float*)arr->base_pointer)[%i] = %f\n", i
,((float*)arr
->base_pointer
)[i
]); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYWxsb2MuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8dGltZS5oPgoKI2RlZmluZSBNQVhfUk9XUyA1MDAwCiNkZWZpbmUgTUFYX0NPTFVNTlMgNTAwMAoKc3RydWN0IGFycmF5CnsKICAgICAgICBpbnQgcm93czsKICAgICAgICBpbnQgY29sdW1uczsKICAgICAgICBpbnQgb3JkZXI7CiAgICAgICAgY2hhciAqYmFzZV9wb2ludGVyOyAvKiBwb2ludGVyIHRvIGFycmF5IG9mIGJ5dGVzLiBJbiB0aGlzIGFycmF5LCBmbG9hdCBudW1iZXJzIHdpbGwgYmUgc3RvcmVkICg0IGJ5dGVzIGVhY2gpICovCn07CnN0cnVjdCBhcnJheSogaW5pdGlhbGl6ZShpbnQgcm93cywgaW50IGNvbHVtbnMsIGludCBvcmRlcikKewogIGludCBpLAogIAkgIHNpemUgPSBjb2x1bW5zICogcm93cyAqIHNpemVvZihmbG9hdCk7CiAgLyogQWxsb2NhdGUgdGhlIHJlcXVpcmVkIG1lbW9yeSBmb3IgdGhlIDJEIGFycmF5IHRvIHN0b3JlIGZsb2F0IHZhbHVlcyAoRXg6IDEuNDUpIHdpdGggInJvd3MiIGFuZCAiY29sdW1ucyIgKi8KICAKICAvLyBJZiB5b3Ugd2FudCB0byBhbGxvY2F0ZSBib3RoIHRoZSBzdHJ1Y3R1cmUgYW5kIHRoZSBpbnRlcm5hbCBzdG9yYWdlIGluIG9uZSBtYWxsb2M6CiAgLyoKICBzdHJ1Y3QgYXJyYXkqIGFycmF5ID0gKHN0cnVjdCBhcnJheSopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGFycmF5KSArIHNpemUpOwogIGFycmF5LT5iYXNlX3BvaW50ZXIgPSAmKChjaGFyKilhcnJheSlbc2l6ZW9mKHN0cnVjdCBhcnJheSldOwogICovCiAgCiAgc3RydWN0IGFycmF5KiBhcnJheSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGFycmF5KSk7CiAgaWYoIWFycmF5KSB7CiAgCXJldHVybiAwOyAvLyBlcnJvcgogIH0KICBhcnJheS0+YmFzZV9wb2ludGVyID0gbWFsbG9jKHNpemUpOwogIGlmKCFhcnJheS0+YmFzZV9wb2ludGVyKSB7CiAgCXJldHVybiAwOyAvLyBlcnJvcgogIH0KICAKICBmb3IoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAJYXJyYXktPmJhc2VfcG9pbnRlcltpXSA9IDA7CiAgfQogIC8qIE1ha2Ugc3VyZSB0aGUgc2l6ZSBpcyB3aXRoaW4gMSB0byBNQVhfUk9XUyBhbmQgMSB0byBNQVhfQ09MVU1OUyBzcGVjaWZpZWQgaW4gbWFpbi5jLiBJZiBub3QgcmV0dXJuIG51bGwgcG9pbnRlciAqLwogIGFycmF5LT5yb3dzID0gcm93czsKICBhcnJheS0+Y29sdW1ucyA9IGNvbHVtbnM7CiAgYXJyYXktPm9yZGVyID0gb3JkZXI7CiAgLyogSW5pdGlhbGl6ZSB0aGUgMkQgYXJyYXkgdG8gdGhlIGFsbCB6ZXJvZXMgKDAuMCkgKi8KICAvKiBBc3NpZ24gc3VpdGFibGUgdmFsdWVzIHRvIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIHN0cnVjdHVyZSBhbmQgcmV0dXJuIHRoZSBzdHJ1Y3QgcG9pbnRlciAqLwogIHJldHVybiBhcnJheTsKIH0KIAogdm9pZCBpbnNlcnQoc3RydWN0IGFycmF5KiBhcnIsIGludCByb3csIGludCBjb2x1bW4sIGZsb2F0IHZhbHVlKSB7CiAJZmxvYXQqIGZsb2F0QXJyID0gKGZsb2F0KilhcnItPmJhc2VfcG9pbnRlcjsKIAlmbG9hdEFyclsoY29sdW1uICogYXJyLT5yb3dzKSArIHJvd10gPSB2YWx1ZTsKIH0KIAogZmxvYXQgcmV0cmlldmUoc3RydWN0IGFycmF5KiBhcnIsIGludCByb3csIGludCBjb2x1bW4pIHsKIAlmbG9hdCogZmxvYXRBcnIgPSAoZmxvYXQqKWFyci0+YmFzZV9wb2ludGVyOwogCXJldHVybiBmbG9hdEFyclsoY29sdW1uICogYXJyLT5yb3dzKSArIHJvd107CiB9CiAKIGludCBtYWluKCkgewogCXN0cnVjdCBhcnJheSogYXJyID0gaW5pdGlhbGl6ZSgzLCA0LCA0Mik7CgkKCQogCWludCBpLCByb3csIGNvbHVtbjsKIAlmbG9hdCBmID0gMC4wOwogCWZvcihjb2x1bW4gPSAwOyBjb2x1bW4gPCBhcnItPmNvbHVtbnM7IGNvbHVtbisrKSB7CiAJCWZvcihyb3cgPSAwOyByb3cgPCBhcnItPnJvd3M7IHJvdysrKSB7CiAJCQlpbnNlcnQoYXJyLCByb3csIGNvbHVtbiwgZik7CiAJCQlmID0gZiArIDEuMDsKIAkJfQogCX0KIAkKIAkvLyBDaGVjayB0aGUgYXJyYXkncyBmaWVsZHMKIAlwcmludGYoImFyci0+cm93cyA9ICVpXG5hcnItPmNvbHVtbnMgPSAlaVxuYXJyLT5vcmRlciA9ICVpXG4iLCBhcnItPnJvd3MsIGFyci0+Y29sdW1ucywgYXJyLT5vcmRlcik7CiAJLy8gcHJpbnQgdGhlIGFycmF5IGxpbmVhcmx5CiAJZm9yKGkgPSAwOyBpIDwgYXJyLT5jb2x1bW5zKmFyci0+cm93czsgaSsrKSB7CiAJCXByaW50ZigiKChmbG9hdCopYXJyLT5iYXNlX3BvaW50ZXIpWyVpXSA9ICVmXG4iLCBpICwoKGZsb2F0KilhcnItPmJhc2VfcG9pbnRlcilbaV0pOwogCX0KIAkKCQogCXJldHVybiAwOwogfQ==