int main()
{
int Array2D[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int *Pos(Array2D[0]);
int *End((Array2D[0] + (3 * 3)) - 1);
int Max(*Pos);
for(; Pos <= End; ++Pos)
if(Max < *Pos) Max = *Pos;
std::cout << Max;
return(0);
}
Pos points to the beginning of Array2D. End is used to point to the end of Array2D. The loops iterates through Array2D. With each cycle of the loop, if Max's value is less than the integer pointed-to by Pos, Max is given that value.
I, personally, think your approach is somewhat overkill. Since you need to find the highest & lowest value of the array, I suggest that you break highlo() into 2 separate functions: SeekHighest() & SeekLowest().
Since FactoryData is global (I recommend making it local to main()), you don't need to pass it the the function(s).