Can anyone explain to me why when I use the new prefix on a pointer in another method than I created it, it does not work as intended?

Code:
#include <iostream>
void magic(int *T, int sz)
{
	T = new int[sz];
	for(int i=0;i<sz;++i)
		T[i] = i;
}

int main()
{
	int *T;
	magic(T , 10);
	for(int i=0;i<10;++i)
		std::cout << T[i] << " ";
}
output is random numbers from memory.

does T no longer point to the start of array when the method magic reaches it end?

Thanks!