We of course can - otherwise printf function can never work because the first argument to it is a "pointer to char". And when we pass a pointer, its value is being passed - but the value being a pointer is expected to be an address of some other object.
char *s = "hello";
printf(s);
char a[2] = {'a', '\0'};
printf(a);
char b = '\0';
printf(&b);
int d = 9;
printf("%d", d); // here address of the string literal "%d" is passed to printf