Stack of integers in C
We wouldn't normally put the function definitions in the header like that.  Just write the declarations that are needed by the calling code, and put the definitions into their own source file.
It seems odd to have these function pointers:

bool (*push)(struct int_stack *, int);
bool (*pop)(struct int_stack *, int *);
int (*size)(struct int_stack *);
void (*print_stack)(struct int_stack *);


Nothing needs them, so just omit them.
pop() uses size() before the latter is defined.  We could solve this by re-ordering, but separating declarations from definitions will naturally fix this.
size() and print() don't need to modify the stack, so they should accept pointer to const object.
The function names are all vulnerable to collisions.  I'd suggest adding a common prefix to distinguish and group them.
Writing zeros to the unused elements is a bit pointless, as those elements are not reachable through the public interface.
Here's my re-write:
Header:
#ifndef INT_STACK_H
#define INT_STACK_H

#include &lt;stdbool.h&gt;

typedef struct int_stack int_stack;

int_stack *stack_create(void);
void stack_free(int_stack *self);

bool stack_push(int_stack *self, int item);
bool stack_pop(int_stack *self, int *out);
int stack_size(const int_stack *self);
void stack_print(const int_stack *self);

#endif // !INT_STACK_H

Implementation
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#define STACK_MAX 1000

struct int_stack {
    int top;
    int data[STACK_MAX];
};


int_stack *stack_create(void) {
    int_stack *stack = malloc(sizeof *stack);
    if (stack) {
        stack-&gt;top = 0;
    }
    return stack;
}

void stack_free(int_stack *self) {
    free(self);
}

bool stack_push(int_stack *self, int item) {
    if (self-&gt;top == STACK_MAX) {
        return false;
    }
    self-&gt;data[self-&gt;top++] = item;
    return true;
}

bool stack_pop(int_stack *self, int *out) {
    if (stack_size(self) == 0) {
        return false;
    }
    *out = self-&gt;data[--self-&gt;top];
    return true;
}

int stack_size(const int_stack *self) {
    return self-&gt;top;
}

void stack_print(const int_stack *self) {
    printf(&quot;| top |\n&quot;);
    for (int i = self-&gt;top-1; i &gt;= 0; i--) {
        printf(&quot;| %3d |\n&quot;, self-&gt;data[i]);
    }
}