++t is an increment operator, it is essentially equivalent to t+=1. Although it does not matter in this situation, note that there is a difference between ++t and t++ (just Google it if you're not sure about it).
As for the string[t], strings (in C) are an array of characters ending in 0 (not the character 0, which has a ASCII value of 32 I think, but the actual value 0, sometimes known as the null character) to indicate the end of the string. This is done since C strings do not implicitly have a length value like C# or Java. Now in C, Boolean values are simply integers where 0 indicates false, and any other value indicates true (generally speaking, I don't think this is actually stated in the standard). So the for loop iterates through each character until it reaches a character which evaluates to false. In this case it is the null character (ie. the end of the string).
void print_upper(char *string)
register int t;
Here, the for loop simply accepts char[element],i.e, an array of characters supplied by the call of the function in main(void) as print_upper(char *string) where the string is supplied as a char pointer parameter. Now, the limiting condition is as long as the char elements of the array is supplied the string is parsed as an array of chars. In languages as C# you simply have the privelage of writing:
where array.length simply calculates the length of the string.