c语言指针数组的首元素地址和索引为0的地址不一样

2025-05-21 05:12:47
推荐回答(2个)
回答1:

*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;
}

望采纳,谢谢!

回答2:

1.它们的地址值是相等的;
2.第1个元素的地址如果是p,则p+1就是第2个元素的地址;
3.数组的首地址如果是p,则p+1就跳过这个数数组而指向这个数组最后一个元素最后一个字节的下一字节。