xplshn
·
2025-09-10
arrays.c
C
1#include <stdio.h>
2#include <stdlib.h>
3#include <stdint.h>
4#include <stdbool.h>
5
6typedef struct Point {
7 int x;
8 int y;
9 unsigned char *name;
10} Point;
11
12typedef enum Color {
13 RED,
14 GREEN,
15 BLUE,
16 YELLOW
17} Color;
18
19void demo_integer_arrays(void) {
20 printf("\n-- Integer arrays --\n");
21
22 // Signed integer types
23 int int_array[3];
24 int8_t int8_array[3];
25 int16_t int16_array[3];
26 int32_t int32_array[3];
27 int64_t int64_array[3];
28
29 // Unsigned integer types
30 unsigned int uint_array[3];
31 uint8_t uint8_array[3];
32 uint16_t uint16_array[3];
33 uint32_t uint32_array[3];
34 uint64_t uint64_array[3];
35
36 // Byte type
37 uint8_t byte_array[3];
38
39 int_array[0] = -100;
40 int_array[1] = 0;
41 int_array[2] = 100;
42 printf("int array: [%d, %d, %d]\n", int_array[0], int_array[1], int_array[2]);
43
44 int8_array[0] = -50;
45 int8_array[1] = 0;
46 int8_array[2] = 50;
47 printf("int8 array: [%d, %d, %d]\n", int8_array[0], int8_array[1], int8_array[2]);
48
49 int16_array[0] = -1000;
50 int16_array[1] = 0;
51 int16_array[2] = 1000;
52 printf("int16 array: [%d, %d, %d]\n", int16_array[0], int16_array[1], int16_array[2]);
53
54 int32_array[0] = -100000;
55 int32_array[1] = 0;
56 int32_array[2] = 100000;
57 printf("int32 array: [%d, %d, %d]\n", int32_array[0], int32_array[1], int32_array[2]);
58
59 int64_array[0] = -1000000;
60 int64_array[1] = 0;
61 int64_array[2] = 1000000;
62 printf("int64 array: [%lld, %lld, %lld]\n",
63 (long long)int64_array[0], (long long)int64_array[1], (long long)int64_array[2]);
64
65 uint_array[0] = 10;
66 uint_array[1] = 20;
67 uint_array[2] = 30;
68 printf("uint array: [%u, %u, %u]\n", uint_array[0], uint_array[1], uint_array[2]);
69
70 uint8_array[0] = 100;
71 uint8_array[1] = 150;
72 uint8_array[2] = 200;
73 printf("uint8 array: [%u, %u, %u]\n", uint8_array[0], uint8_array[1], uint8_array[2]);
74
75 uint16_array[0] = 1000;
76 uint16_array[1] = 2000;
77 uint16_array[2] = 3000;
78 printf("uint16 array: [%u, %u, %u]\n", uint16_array[0], uint16_array[1], uint16_array[2]);
79
80 uint32_array[0] = 100000;
81 uint32_array[1] = 200000;
82 uint32_array[2] = 300000;
83 printf("uint32 array: [%u, %u, %u]\n", uint32_array[0], uint32_array[1], uint32_array[2]);
84
85 uint64_array[0] = 1000000;
86 uint64_array[1] = 2000000;
87 uint64_array[2] = 3000000;
88 printf("uint64 array: [%llu, %llu, %llu]\n",
89 (unsigned long long)uint64_array[0],
90 (unsigned long long)uint64_array[1],
91 (unsigned long long)uint64_array[2]);
92
93 byte_array[0] = 'A';
94 byte_array[1] = 'B';
95 byte_array[2] = 'C';
96 printf("byte array: [%c, %c, %c]\n", byte_array[0], byte_array[1], byte_array[2]);
97}
98
99void demo_float_arrays(void) {
100 printf("\n-- Float arrays --\n");
101
102 float float_array[3];
103 float float32_array[3];
104 double float64_array[3];
105
106 float_array[0] = 1.1f;
107 float_array[1] = 2.2f;
108 float_array[2] = 3.3f;
109 printf("float array: [%.2f, %.2f, %.2f]\n", float_array[0], float_array[1], float_array[2]);
110
111 float32_array[0] = 1.25f;
112 float32_array[1] = 2.75f;
113 float32_array[2] = 3.125f;
114 printf("float32 array: [%.3f, %.3f, %.3f]\n", float32_array[0], float32_array[1], float32_array[2]);
115
116 float64_array[0] = 1.123456;
117 float64_array[1] = 2.789012;
118 float64_array[2] = 3.456789;
119 printf("float64 array: [%.6f, %.6f, %.6f]\n", float64_array[0], float64_array[1], float64_array[2]);
120}
121
122void demo_bool_arrays(void) {
123 printf("\n-- Bool arrays --\n");
124
125 bool bool_array[4];
126 bool_array[0] = true;
127 bool_array[1] = false;
128 bool_array[2] = true;
129 bool_array[3] = false;
130
131 printf("bool array: [%s, %s, %s, %s]\n",
132 bool_array[0] ? "true" : "false",
133 bool_array[1] ? "true" : "false",
134 bool_array[2] ? "true" : "false",
135 bool_array[3] ? "true" : "false");
136}
137
138void demo_pointer_arrays(void) {
139 printf("\n-- Pointer arrays --\n");
140
141 int values[3];
142 int *int_ptr_array[3];
143 unsigned char *string_array[3];
144 void *void_ptr_array[3];
145
146 values[0] = 42;
147 values[1] = 84;
148 values[2] = 126;
149
150 int_ptr_array[0] = &values[0];
151 int_ptr_array[1] = &values[1];
152 int_ptr_array[2] = &values[2];
153
154 printf("int* array dereferenced: [%d, %d, %d]\n",
155 *int_ptr_array[0], *int_ptr_array[1], *int_ptr_array[2]);
156
157 string_array[0] = (unsigned char *)"Hello";
158 string_array[1] = (unsigned char *)"World";
159 string_array[2] = (unsigned char *)"GBC";
160
161 printf("string array: [\"%s\", \"%s\", \"%s\"]\n",
162 string_array[0], string_array[1], string_array[2]);
163
164 void_ptr_array[0] = &values[0];
165 void_ptr_array[1] = string_array[0];
166 void_ptr_array[2] = int_ptr_array;
167}
168
169void demo_struct_arrays(void) {
170 printf("\n-- Struct arrays --\n");
171
172 Point point_array[3];
173
174 point_array[0].x = 10; point_array[0].y = 20; point_array[0].name = (unsigned char *)"Origin";
175 point_array[1].x = 100; point_array[1].y = 200; point_array[1].name = (unsigned char *)"Point A";
176 point_array[2].x = -50; point_array[2].y = 75; point_array[2].name = (unsigned char *)"Point B";
177
178 printf("Point array:\n");
179 int i = 0;
180 while (i < 3) {
181 printf(" [%d]: (%d, %d) \"%s\"\n", i,
182 point_array[i].x, point_array[i].y, point_array[i].name);
183 i = i + 1;
184 }
185}
186
187void demo_enum_arrays(void) {
188 printf("\n-- Enum arrays --\n");
189
190 Color color_array[4];
191 color_array[0] = RED;
192 color_array[1] = GREEN;
193 color_array[2] = BLUE;
194 color_array[3] = YELLOW;
195
196 printf("Color array:\n");
197 int i = 0;
198 while (i < 4) {
199 const char *color_name;
200 switch (color_array[i]) {
201 case RED: color_name = "RED"; break;
202 case GREEN: color_name = "GREEN"; break;
203 case BLUE: color_name = "BLUE"; break;
204 case YELLOW: color_name = "YELLOW"; break;
205 default: color_name = "UNKNOWN";
206 }
207 printf(" [%d]: %s (%d)\n", i, color_name, color_array[i]);
208 i = i + 1;
209 }
210}
211
212void demo_struct_pointer_arrays(void) {
213 printf("\n-- Struct pointer arrays (dynamic) --\n");
214
215 Point *point_ptr_array[2];
216 point_ptr_array[0] = malloc(sizeof(Point));
217 point_ptr_array[1] = malloc(sizeof(Point));
218
219 point_ptr_array[0]->x = 300;
220 point_ptr_array[0]->y = 400;
221 point_ptr_array[0]->name = (unsigned char *)"Dynamic A";
222
223 point_ptr_array[1]->x = -150;
224 point_ptr_array[1]->y = 250;
225 point_ptr_array[1]->name = (unsigned char *)"Dynamic B";
226
227 printf("Dynamic Point* array:\n");
228 int i = 0;
229 while (i < 2) {
230 printf(" [%d]: (%d, %d) \"%s\"\n", i,
231 point_ptr_array[i]->x, point_ptr_array[i]->y, point_ptr_array[i]->name);
232 i = i + 1;
233 }
234
235 free(point_ptr_array[0]);
236 free(point_ptr_array[1]);
237}
238
239int main(void) {
240 printf("GBC array types test\n");
241 printf("Quick run of arrays for core types.\n");
242
243 demo_integer_arrays();
244 demo_float_arrays();
245 demo_bool_arrays();
246 demo_pointer_arrays();
247 demo_struct_arrays();
248 demo_enum_arrays();
249 demo_struct_pointer_arrays();
250
251 printf("\nDone.\n");
252 return 0;
253}