C和指针 第6章 指针 6.7 指针、间接访问和左值

6.7 指针、间接访问和左值
    间接访问操作符所需要的操作数是个右值,但这个操作符所产生的结果是个左值。
    给定下面这些声明:
    int a;
    int *d = &a;
    表6.3                表达式示例
    表达式                    左值                指定位置
    a                          是                    a
    d                          是                    d
    *d                         是                    a
    指针变量可以作为左值,并不是因为它们是指针,而是因为它们是变量。对指针变量进行间接访问表示我们应该访问指针所指向的位置。间接访问指定了一个特定的内存位置,这样我们可以把间接访问表达式的结果作为左值使用。在下面这两条语句中:
    *d = 10 - *d;
    d = 10 - *d; <--???
    第1条语句包含了两个间接访问操作。右边的间接访问作为右值引用,所以它的值是d所指向的位置所存的值(a的值)。左边的间接访问作为左值使用,所以d所指向的位置(a)把赋值符右侧的表达式的计算结果作为它的新值。
    第2条语句非法的,因为它表示把一个整型变量(10-*d)存储于一个指针变量中。当实际使用的变量类型和应该使用的变量类型不一致时,编译器会发出警告,帮助我们判断这种情况。尽管被迫处理这些信息是我们很不情愿干的事情,但改正这些错误(尤其是那些不会中止编译过程的警告信息)确实是个好主意。在修正程序方面,让编译器告诉你哪里错了比你以后自己调试程序要方便得多。调试器无法像编译器那样准确地查明这些问题。
    K&R C:
    当混用指针和整型值时,旧式C编译器并不会发出警告。但是,我们现在对这方面的知识了解得更透彻一些了。把整型值转换为指针或把指针转换成整型值是极为罕见的,通常这类转换属于无意识的错误。  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_40186813

你的能量无可限量。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值