C code displaying random datasets
My little bit of input:


inline is a C++ keyword, and it's only a hint to the compiler. The only reason to explicitly use inline is when you define function's body inside a header file, which is included in more than one source file.
Avoid basic data types like int, use types from stdint.h instead
Use comments to explain why are you doing something, and what are function arguments for
No reason to break a line after declaring a type.
No reason to give nameList[32] a size - the compiler will guess it on its own. Just do it as

static char* nameList[]  = {
    "Ross",
    "Litt",
    "Hellyeah"
}; 

Use sizeof(nameList) - 1 instead of a magic number to indicate last array index - there will be less changes if you ever add more names.


Regarding your union questions:

union is kinda like a struct; the only difference is how it's handled in memory.
Since your union has two fields (PersonItem and CompanyItem), you must say which one is to be used. Every object created with your struct will contain both fields. What you're trying to do is called polymorphism, and you have it with classes in C++. Original C does not have such option.