考虑以下代码:
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<string.h>
struct Person {
char *name;
int age;
int height;
int weight;
};
struct Person Person_create(char *name,int age,int height,int weight)
{
struct Person who;
who.name=strdup(name);
who.age=age;
who.height=height;
who.weight=weight;
return who;
}
void Person_destroy(struct Person who)
{
free(who.name);
}
void Person_print(struct Person who)
{
printf("%s %d %d %d %p \n",who.name,who.age,who.height,who.weight,&who);
}
int main(int argc,char *argv[])
{
struct Person p1=Person_create("shahrooz",26,180,100);
Person_print(p1);
Person_destroy(p1);
struct Person *p2=&p1;
printf("%p %p \n",&p1,&p2);
return 0;
}
我在指针(p1
)中指定了p2
的地址。但是在打印地址p1
和p2
时为什么地址不相同?
printf("%p %p \n",&p1,&p2);
返回
0x7ffc1b96f980 0x7ffc1b96f978
你能告诉我为什么吗?
答案 0 :(得分:1)
在您的代码中,更改
printf("%p %p \n",&p1,&p2);
到
printf("%p %p\n",&p1,p2);
因为&p1
是指向struct 的指针,所以p2
(不是&p2
)。
FWIW,&p2
是指向struct 指针的指针。所以,
打印
p1
和p2
地址时为何地址不相同?
因为p1
的地址与p2
的地址不同。 p1
的地址是p2
的值。