c的数组指针问题,下面的地址分别是谁的?

const int MAX = 4;
 
int main ()
{
   const char *names[] = {
                   "Zara Ali",
                   "Hina Ali",
                   "Nuha Ali",
                   "Sara Ali",
   };
   int i = 0;
 
   for ( i = 0; i < MAX; i++)
   {
      //printf(" names[%d] = %p\n", i, *names[i] ); 
      //printf(" names[%d] = %p\n", i, names[i] );
      
      
   }
 
   return 0;
}

name[i]是对应的每一个字符的地址
*name[i]是每个字符串的第一个字符
比如name[0]就是字符串Zara Ali的首地址
*name[0]就是字符Z

names[i]是每个字符串,加*就是第一个字符
%p只是按照地址格式输出后面的变量的值。