注册 登录
编程论坛 C语言论坛

结构指针

LGD335060087 发布于 2020-03-15 15:41, 1168 次点击
#include"stdio.h"
struct date{
    int year;
    int month;
    int day;
}today,*p;
int main()
{
    today=(struct date){.year=2020,.month=03,.day=15};
    p=&today;

    printf("%p\n",p);
    printf("%d",*p);
    return 0;
}
为什么*p输出一个奇怪的数字?
4 回复
#2
纯蓝之刃2020-03-15 15:54
程序代码:
int main()
{
    today=(struct date)
    {
        .year=2020,.month=03,.day=15
    };
    p=&today;

    printf("%p\n",p);
    printf("%d,%d,%d",p->year,p->month,p->day);
    return 0;
}

printf("%p\n",p);
打印了p所指向内存空间的首地址。
printf("%d,%d,%d",p->year,p->month,p->day);
打印了该内存空间所存储的值。
printf("%d",*p);
则是将从首地址开始直到第一个空字符的内存之间的所能组成数字进行打印。
#3
LGD3350600872020-03-15 16:30
回复 2楼 纯蓝之刃
如果说我要输出struct 中的所有成员就应该写成    printf("%p\n%p\n%p\n",p->year,p->month,p->day);
#4
LGD3350600872020-03-15 16:35
回复 2楼 纯蓝之刃
为什么printf("%p",p);输出的地址和    printf("%p\n%p\n%p\n",p->year,p->month,p->day);    输出的第一个地址不同呢
#5
吹水佬2020-03-15 17:36
以下是引用LGD335060087在2020-3-15 16:35:31的发言:

为什么printf("%p",p);输出的地址和    printf("%p\n%p\n%p\n",p->year,p->month,p->day);    输出的第一个地址不同呢

概念问题
结构、结构成员、数据类型
1