In conjunction with say a Column letter a number may indeed indicate a specific cell but the syntax for =VLOOKUP is VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) (ref) so in this context a number indicates an entire column (1 for A [in this instance, since the index field is in ColumnA], so 3 for C).
A fourth parameter (range_lookup) is generally advisable (usually FALSE but 0 serves) to ensure matching of index is exact and not just 'next best'. In an array ordered ascending for lookup_value, if the fourth parameter is omitted, TRUE or 1 the formula would return the next largest value that is less than lookup_value, where there is no exact match. Where not ordered 'next best' could be almost any of the values in the (here third) column.
With FALSE or 0 the array does not need to be ordered.
It may be worth repeating that the col_index_num cannot be negative.