c中取地址运算符&与指针取成员运算符->的优先级

c中取地址运算符&与指针取成员运算符->的优先级,是->的优先级高于&。

可以通过以下小程序测试。

假设一个结构体形如:

struct Test {
   int apple;
};

现在声明并定义一个结构指针,并初始化成员:

struct Test *pTest = (struct Test *)malloc(sizeof(struct Test));
ptest->apple = 1;

可以通过表达式(&ptest->apple)来测试,&与->的优先级孰高孰低。

假设ptest->apple的地址为0x123456则表达式(&ptest->apple)有如下表中所列的情况:

& 与 ->的运算优先级&ptest->apple
->优先级高   0x123456   (是ptest->apple的地址,等价于&(ptest->apple))
&优先级高  报错  (等价于(&ptest)->apple,(&ptest)是一个指针的地址,也就是指针的指针,它不是结构指针,因此无法用取指针运算符。)

测试程序:

//getaddress_getmember_priority.c

#include <stdio.h>
#include <stdlib.h>

struct Test {
    int apple;
};

int main()
{
    struct Test *ptest = (struct Test *)malloc(sizeof(struct Test));
    if(NULL == ptest)
    {
         printf("Malloc error: There is no memory.\n");
    }

    int *papple = &(ptest->apple);
    if(papple == (&ptest->apple))
    {
        printf("[(->) > &]: \n   &ptest->apple is same as &(ptest->apple).\n");
    }
    else
    {
    printf("note:this can't be priented.Because (&ptest) has no member apple.\n"\
            "[(->) < &]: \n   &ptest->apple is same as (&ptest)->apple.\n");
    }

    return 0;
}

结果证实,运算符->优先级高于&。





  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值