endereço de memória valor positivo ou negativo em c?

em c, eu tentei imprimir o endereço da variável e endereço de alguma função. Eu tenho um é o valor negativo, o outro é o valor positivo. Minha pergunta é: por que C não representa todo valor negativo ou todo positivo?

Aqui está o meu código:

int foo() { 
     return 0;
}

int main() {

    int a;
    printf("%d\n",&a);

    printf("%d\n",foo);

    return 0;
}

Aqui está o resultado:

-1075908992 134513684

questionAnswers(10)

yourAnswerToTheQuestion