C程序设计学习Day1

分析程序:
#include <stdio.h>

struct stu {
    int x;
    int *y;
};

int dt[4]={10,20,30,40};
struct stu a[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};

int main() {
    struct stu *p = a;
    printf("%d,",++p->x);
    printf("%d,",(++p)->x);
    printf("%d\n",++(*p->y));
    return 0;
}

输出结果:

51,60,21
解释 :

        首先要明确,++ 的  优先级  要小于  ->。 ->运算符用于访问结构体指针的成员,它的优先级高于所有一元运算符,包括 ++和--因此,当++运算符与->运算符一起使用时,->运算符会先执行。

 printf("%d,",++p->x);     表示  先进行 p->x 操作,后++ 。即  先指向a[0].x=50,  后50加1。

       请明确,C语言中,括号的优先级是最高的

 printf("%d,",(++p)->x);   表示     先进行p指向a的指针地址+1,从a[0]变成a[1],之后取出a[1]中的x值,也就是60.

 printf("%d\n",++(*p->y));   表示     p指针指向结构体数组a[1]中y(因为上一条指令已经把p指针进行了++),而a[1]对应的y又是指针变量,它指向dt数组地址为1,值为20,进行++后输出21.

另外  可能会比较疑惑这个点:

要判断 struct stu a[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]}; 是结构体 struct stu 的实例,我们需要比较结构体的定义和初始化列表:

struct stu {
    int x;
    int *y;
};

        在这个结构体定义中,struct stu 有两个成员:一个整数 x 和一个整数指针 y

        在初始化列表 {50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]} 中,我们可以看到每个元素都是由两个值组成:一个整数和一个地址。这与 struct stu 的成员类型相匹配,其中整数对应于 x,而地址对应于 y

        由于初始化列表中的每个元素都恰好提供了两个值,并且这两个值的类型与 struct stu 的成员类型一致,我们可以确定 a 是一个 struct stu 类型的数组。每个结构体元素的 x 成员被初始化为 50、60、70、80,而 y 成员被初始化为指向数组 dt 中相应元素的指针。

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值