What is the difference between a declaration of a variable and a definition of var in C? What is the difference between declaring a variable as char *buffer and char **buffer in the C programming language?