name[]是一个指针数组,里面存放的都是指针
从char**p, *name[ ]={“Follow Me”,“Dephi”, “Visual Basic”, “C++”, “ComputerProgram Design”};可以看出初始化name[]时存放了5个指针,他们的值,分别指向5个字符串的首地址。可以认为在五个格子内放了5个地址,但同时5个格子也具有格子的地址,理清这一点很重要。如图蓝色线条便是数组每个格子的地址


p=name+2; name+2取的是数组的第三个元素,该元素的值就是字符串Visual Basic的首地址
printf (“%o\n”,*p); p是一个二级指针,对其*运算得到的是name[]数组第三个格子里存储的值,输出的是字符串Visual Basic的首地址
printf (“%o\n”,p); p作为一个二级指针,直接存放的是另一个指针的地址,也就是数组name[]第三个格子自身的地址,注意是格子自身的地址,并不是格子里存储的值,所以输出的数组第三个格子自身的地址。
printf (“%s\n”,*p); %s输出字符串,*p是Visual Basic的首地址,自然输出Visual Basic