If you are looking for the maximum CGPA, why do you name your variable min_cgpa? Just to confuse the reader -- or yourself :-)
By just reading your code I can spot a couple of things:
(a) Ask yourself what happens when the first student is the one with the maximum CGPA. Does pos get assigned any value in that case?
(b) Why would you want to access student[pos+1] if pos is the index of the maximum, as you suggest in the text below your code? pos could have the value of size-1 and in that case you would be accessing an undefined object.
(c) What do you intend with the line
*(student)++;
You probably meant to write:
++student;
And even simpler and more intuitive (and safer) would be to access student[i] in those loops. Otherwise, if you increment the student pointer one time too much or too little you will end up accessing the wrong objects.
And, of course, this is no homework :-)