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

int main()
{char *name[]={"f","a","b","c"};
char **p;
int i;
p=name;
printf("name[0]=%d\n",name[0]);
printf("name=%d\n",name);
printf("p=%d\n",p);
printf("*p=%d\n",*p);

return 0;

}
这个程序name是指针数组的首元素地址,但是name[0]的值和他不一样;为什么


运行结果为
name[0]=4206628
name=6356732
p=6356732
*p=4206628

*name[]是以char 为基类型的指针数组,**p是以char 为基类型的指向指针的指针。虽然赋值上p=name代表了p=name的首地址,但实际上*p才是name的地址,打印的时候按照以下格式打印才能输出正确的结果:

#include <stdio.h>
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个回答  2017-12-10
1.它们的地址值是相等的;
2.第1个元素的地址如果是p,则p+1就是第2个元素的地址;
3.数组的首地址如果是p,则p+1就跳过这个数数组而指向这个数组最后一个元素最后一个字节的下一字节。追问

不懂,难道name和name【0】不是地址么

本回答被网友采纳
相似回答
大家正在搜