I would create a temporary (non-table) pointer to hold ptTimerTable[0] and put that temporary pointer into the StartTimer() function instead. It just brings the reference one level simpler so the function doesn’t have as much to unpack.
I suspect others like @philip will be along at some point to offer some suggestions as well.
Back the the search results… if you check a few of them out you will find some great input related to your post.
This thread here is probably the best (second search result).
I think you know by now that you will need a pointer to an up timer to assign the pointer table to.
If you have a need for a lot of timers, instead of creating individual timers, you could create a table that holds time values. Various ways of doing this in the below post. You can also have them be persistent which is also useful.