Sample Program for Declaration Reading


#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;
}

Leave a Reply