If you get east past the Buffalo you get into more limestone than sand . <| sep |> I understand what you ' re getting at but research actually doesn ' t support fit fat . <| sep |> Sorry for the crappy picture haha . It is kind of hard to identify <| sep |> It was slower at my regular store one day and all my favorite baristas were working . They encouraged me to be That Guy 😂 So I wandered off my normal path with a Surprise Me . It ended up being the best decision ever . A Venti Doubleshot with soy and toffee nut . <| sep |> I imagine with the approach you ' ve described , it would involve writing not only a different struct declaration , but a different function definition for each function that operates on it . with that type of design the library wouldn ' t provide an abstract data type in the conventional sense , but rather a set of macros that allow the user of the library to generate the appropriate struct declarations and function definitions conveniently . I ' m not sure whether I ' m understanding that right , but I reckon it ' s worth writing something up and seeing how it works out in practice . the best ideas are the ones that are pursued . an idea to think about , is would it be necessary for the library to know the element type for the array ? for instance , if you wanted to insert or append to the end of the array , you wouldn ' t need to know the element type or even the element size , in addition to the array and the current size of it , you ' d just need the data and the length of the data to append . to provide a rough illustration , struct vec void p int n . extern struct vec vecempty void vecinsertstruct vec vp , void p , int n # include stdlib . h # include string . h struct vec vecempty NULL , 0 void vecinsertstruct vec vp , void p , int n char tmp tmp reallocvpp , vpn n if tmp NULL return NULL memcpytmp vpn , p , n vpp tmp vpn n return tmp # include stdio . h int mainvoid struct vec v int i , n int p v vecempty while scanf % d , n 1 vecinsertv , n , sizeof n p v . p n v . n sizeof p for i 0 i n i printf % d % s , p , i 1 n ? n perhaps this approach may be worth considering if you ' re looking for other ideas on implementing generic arrays .