Dynamic Memory Allocation

Q1. At the time of Pointers, we pass address of array to the pointer.
i.e. int arr[50];
int* ptr;
ptr=&arr;
BUT, In Dynamic Memory Allocation, we can create the memory for the array without passing address of array to the pointer.
i.e. int arr[50];
int* ptr;
ptr = (int*)malloc(n*sizeof(int));
where n is the size of array.

Q2. How memory is allocated when we use malloc and calloc function. Explain, the difference between them on the base of memory allocation.