在下列情况下,为什么结构地址在赋值后不等于

时间:2018-03-28 09:18:17

标签: c pointers struct

#include <stdio.h>


int main() {
    struct my_structure {
        char name[20];
        int number;
        int rank;
    };

    struct my_structure var = {"Stud", 35, 1};
    struct my_structure *ptr;
    ptr = &var;

    printf("%p ", &var);
    printf("\n");
    printf("%p ", &ptr);

    return 0;
}

代码在c99下编译。 ptr 不等于 var 。为什么?

0x7ffeea577988

0x7ffeea577978

2 个答案:

答案 0 :(得分:8)

使用

printf("%p ", &ptr);

您不打印ptr指向的位置,您打印ptr变量的位置。

如果您希望两个printf调用都打印相同的内容,则不应使用address-of运算符:

printf("%p ", ptr);

答案 1 :(得分:1)

完成此作业后

ptr = &var;

变量ptr存储变量var的地址。因此,要使用变量ptr输出地址,您应该输出ptr中的值。

还要考虑结构类型的对象的地址等于对象的第一个成员的地址。

最后根据C标准,没有参数的函数main应声明为

int main( void )

这是一个示范程序。

#include <stdio.h>

int main(void) 
{
    struct my_structure
    {
        char name[20];
        int number;
        int rank;
    };

    struct my_structure var = {"Stud", 35, 1};
    struct my_structure *ptr;
    ptr = &var;

    printf("%p\n", ( void * )&var);
    printf("%p\n", ( void * )ptr);
    printf( "%p\n", ( void * )var.name );

    return 0;
}

它的输出可能看起来像

0x7ffce8ed4f10
0x7ffce8ed4f10
0x7ffce8ed4f10

正如您所看到的,这三个地址彼此相同。