Are the below statements same?
char *PTR='\0';
&
char *PTR=NULL;
Are the below statements same?
char *PTR='\0';
&
char *PTR=NULL;
Accidentally, yes.
'\0' is a character with ASCII code 0; as such, it is an integer with value 0. NULL is usually also an integer with value 0. They are typically of different sizes, but the compiler will recognise that in this case, so in both cases PTR ends up as a null-pointer (i.e. pointer with value 0).
If you had written char *PTR="\0"; with double-quotes, that's a very different situation: "\0" would be allocated as a two-character array, with both characters being ASCII 0. PTR would be initialised to point at the first of the two zeroes.
No they are not, although they will produce the same result. '\0' is a single byte character which we use as a null terminating character on the string. NULL is (void*)0, which is a pointer, and is a 64bit value (or 32bit depending on architecture). You'd be better off using NULL (or nullptr) for pointer values, and keep '\0' as a way to terminate a string. Having said that though, converting '\0' to a pointer should be fine. Going the other way may produce a warning (converting 64bit value to an 8bit one).
char *PTR = '\0';
char CHAR = '\0';
char *PTR = NULL;
char CHAR = NULL; ///< will generate a warning
NULL is a macro. So it depends on what its definition is. Usually NULL is just 0.
Here is already a good answer