This a sample program to demonstrate the use of various declarations that are used. There are indeed many more that are used based on given situation, but these are references on how few of them are used.
#include <stdio.h>
#include <stdlib.h>
int my_add(int a, int b) { return a + b; }
int my_sub(int a, int b) { return a - b; }
int my_mul(int a, int b) { return a * b; }
int my_div(int a, int b) { return a / b; }
typedef struct {
int x;
int y;
} Point;
Point* createPoint(int x, int y) {
Point* p = (Point*)malloc(sizeof(Point));
p->x = x;
p->y = y;
return p;
}
typedef int (*Operation_Func_ptr)(int, int); // Function pointer typedef
int perform_operation(int a, int b, Operation_Func_ptr operation) {
return operation(a, b);
}
int getXCoordinate(Point* p) {
return p->x;
}
int main() {
int a = 200, b = 25;
int result;
int (*operations_array_of_ptr_to_fun[4])(int, int) = { my_add, my_sub, my_mul, my_div }; // Array of pointers to functions
Point points[] = { {1, 2}, {3, 4}, {5, 6} };
Point* p = points; // Pointer to array of structures
Point* p1 = createPoint(10, 20); // Pointer to function returning a structure
typedef union {
int intValue;
float floatValue;
} Data;
Data* data = (Data*)p1; // Pointer to union
Point* (*createPointPtr)(int, int) = createPoint;
Point* p2 = createPointPtr(50, 90); // Pointer to function returning a pointer
Point** pp = &p2; // Pointer to pointer to structure
Point* pointArray[] = { p1, p2 }; // Array of pointers to structures
Point** ppArray = pointArray; // Pointer to array of pointers
Point* (*createPointPtr2)(int, int) = createPoint; // Pointer to function returning a pointer to a structure
Point* p3 = createPointPtr2(90, 40);
int (*getX)(Point*) = getXCoordinate;
int x = getX(p3); // Pointer to function taking a pointer to a structure.
typedef struct {
union {
int intValue;
float floatValue;
} data;
Point point;
} UnionStruct; // Structure of union of structures
UnionStruct unionStruct;
for (int i = 0; i < 4; i++) {
char* operationNames[] = { "my_add", "my_sub", "my_mul", "my_div" };
printf("%s = %d\n", operationNames[i], perform_operation(a, b, operations_array_of_ptr_to_fun[i]));
}
printf("p1: (%d, %d)\n", p1->x, p1->y);
printf("p2: (%d, %d)\n", p2->x, p2->y);
printf("p3.x = %d\n", x);
printf("Union Data: %d\n", unionStruct.data.intValue);
printf("Union Point: (%d, %d)\n", unionStruct.point.x, unionStruct.point.y);
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
An Article by: Yashwanth Naidu Tikkisetty
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
