На тему эквивалентны ли эти типы и когда что следует использовать, можно много рассуждать. Но на практике вы можете считать их эквивалентными и использовать по своему предпочтению.
Обычно тип size_t используется, чтобы подчеркнуть, что мы имеем дело с объектом, содержащим в себе некий размер, количество элементов, количество итераций. Тип uintptr_t разумно использовать при работе с указателями.
Если вы не знаете, какому типу отдать предпочтение, то заведете свой собственный тип отражающий сущность, с которой вы работаете, используя typedef.
0