*name[]是以char 为基类型的指针数组,**p是以char 为基类型的指向指针的指针。虽然赋值上p=name代表了p=name的首地址,但实际上*p才是name的地址,打印的时候按照以下格式打印才能输出正确的结果:
#include
int main()
{
char *name[]={"Beijing","Shanghai","Nanjing","Suzhou"};//定义指针数组
char **p;//定义指向指针的指针
p=name;//p指向name的首地址
int i;
for(i=0;i<4;i++)
{
printf("Address_%d:%d\t",i,*(p+i));//name[i]的地址
printf("Value_%d:%s\n",i,*(p+i));//name[i]的值
}
return 0;
}
望采纳,谢谢!
1.它们的地址值是相等的;
2.第1个元素的地址如果是p,则p+1就是第2个元素的地址;
3.数组的首地址如果是p,则p+1就跳过这个数数组而指向这个数组最后一个元素最后一个字节的下一字节。