如下代码和结果
指针数据作为函数的形参和实在的时候,形参指针p和实参指针name指向同一个地址是没问题的,可为什么用&去他自身变量的地址的时候取出来的也是同一的地址呢?
int main()
{
void print(char *p[]);
char *name[] = { "11111","2222222","33333333" };
printf("name[0]的地址为:%d\n", &name[0]);
printf("name[0]指向的地址为:%d\n", name[0]);
printf("name[0]的值为:%s\n", name[0]);
printf("\n");
printf("\n");
print(name);
return 0;
}
void print(int *p[])
{
printf("p[0]的地址为:%d\n", &p[0]);
printf("p[0]指向的地址为:%d\n", p[0]);
printf("p[0]的值为:%s\n", p[0]);
}
下图为输出结果:
为了区别问题,特写了一个用指针作为参数的函数做了对比,如下:
int main()
{
void print(char *p);
int name = 5;
int *n;
n = &name;
printf("n的地址为:%d\n", &n);
printf("n指向的地址为:%d\n", n);
printf("name的地址为:%d\n", &name);
printf("n指向的地址的值为:%d\n", name);
printf("\n");
printf("\n");
print(n);
return 0;
}
void print(int *p)
{
printf("p的地址为:%d\n", &p);
printf("p指向的地址为:%d\n", p);
printf("p的值为:%d\n", *p);
printf("\n"); printf("\n");
}
下图为输出结果:
为什么这里实参指针n和形参指针p自身地址是不一样的,而上面用指针数据的时候,实参指针数组name和形参指针数组p是一样的。这里有什么区别吗?