Если C не поддерживает передачу переменной по ссылке, почему это работает?
#include <stdio.h>
void f(int *j) {
  (*j)++;
}
int main() {
  int i = 20;
  int *p = &i;
  f(p);
  printf("i = %d\n", i);
  return 0;
}
Выход:
$ gcc -std=c99 test.c
$ a.exe
i = 21