#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
答案 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
正如您所看到的,这三个地址彼此相同。