指针数组地址疑问
本帖最后由 komodo 于 2020-8-27 18:01 编辑【疑问】
为什么p和&p的结果相等?
【我的想法】
p指向指针p1自身的地址,那p的值就是p1所在的地址,同时p自己就是个指针,也会占用内存,也会拥有自己的地址,所以&p应该打印指针p自身所在的地址,但是结果p和&p打印的结果一致,按理说&p和p的值是两个不同的地址啊,望赐教。
int a = 10;
int b = 2;
int c = 22;
int *p1 = &a;
int *p2 = &b;
int *p3 = &c;
int *p[] = {p1, p2, p3};
printf("p= %p\n", p);
printf("&p = %p\n", &p);
//结果如下
//p= 0x7ffee0767700
//&p = 0x7ffee0767700 本帖最后由 komodo 于 2020-8-28 13:12 编辑
后来的同学可以看如下代码,如果你也搞清楚了的话,看到如下代码也会豁然开朗的{:5_109:}
#include<stdio.h>
#include<string.h>
int main(void){
char *p[] = {
"dalian",
"shenzhen",
"guangxi"
};
printf("p = %p\n", p);
printf("&p = %p\n", &p);
printf("&p = %p\n", &p);
printf("\n");
printf("*p = %p\n", *p);
printf("p = %p\n", p);
printf("&p = %p\n", &p);
printf("\n");
printf("*p = %s\n", *p);
printf("p = %s\n", p);
printf("\n");
printf("**p = %c\n", **p);
printf("*p = %c\n", *p);
printf("p = %c\n", p);
return 0;
}
/*
p = 0x7ffee9ea96b0
&p = 0x7ffee9ea96b0
&p = 0x7ffee9ea96b0
*p = 0x105d56ef8
p = 0x105d56ef8
&p = 0x105d56ef8
*p = dalian
p = dalian
**p = d
*p = d
p = d
*/
因为你这个*p[]是一个指针数组
对于数组来说,数组名就是取数组的地址,使用&符号也是取地址,因此这两个结果是一样的
这个想不明白的话,可以写一个一般的数组,看看,或许就明白了。
因为指针数组也是数组
#include <stdio.h>
int main(void) {
int p[] = {1,2,3};
printf("p= %p\n", p);//这个是取数组地址
printf("&p = %p\n", &p);//这个也是取数组地址
return 0;
} sunrise085 发表于 2020-8-27 19:03
因为你这个*p[]是一个指针数组
对于数组来说,数组名就是取数组的地址,使用&符号也是取地址,因此这两个 ...
非常感谢!
页:
[1]