将struct的地址分配给指针

时间:2015-05-10 16:41:40

标签: c pointers struct

考虑以下代码:

#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的地址。但是在打印地址p1p2时为什么地址不相同?

printf("%p %p \n",&p1,&p2);

返回

0x7ffc1b96f980 0x7ffc1b96f978 

你能告诉我为什么吗?

1 个答案:

答案 0 :(得分:1)

在您的代码中,更改

printf("%p %p \n",&p1,&p2);

printf("%p %p\n",&p1,p2);

因为&p1是指向struct 的指针,所以p2(不是&p2)。

FWIW,&p2是指向struct 指针的指针。所以,

  

打印p1p2地址时为何地址不相同?

因为p1的地址与p2的地址不同。 p1的地址是p2