> int arr[col][row] = {(1,2,3),(4,5,6),(6,7,8)};
All those ( ) should be { }

> void foo(int *a,int col , int row)
Is it your intention to "flatten" the array like this, or is it just something you figured out how to pass a 2D array into a function.

void foo ( int a[row][col], int row, int col )
would accept a true 2D array.

Also, your row and col are the same names as your #defines, so the line expands to
void foo(int *a,int 3, int 3)
Tip: All #defines should be written in upper case, like
#define ROW 3