a - это дескриптор, см., Например, http://en.wikipedia.org/wiki/Handle_%28computing%29
Ядро хранит необходимые ему структуры в таблице, так что каждый раз, когда вы обращаетесь к дескриптору, оно может искать нужные ему данные.
Вы можете реализовать простой механизм обработки, например, с массивом:
struct MyData {
float f;
};
MyData TheArray[100];
void setFloat(int Handle, float v) {
TheArray[Handle].f = v;
}
float getFloat(int Handle) {
return TheArray[Handle].f;
}
Пользователь ваших функций знает только, что существуют setFloat и getFloat.Используя это, он не знает, как вы внутренне отслеживаете поплавки, но все же может надежно обращаться к ним с помощью ручки.