秒解指针变量:抵消法

一、本篇blog目的

本篇的目的是为了说明下面代码中的一个等价关系:

int a=200;

int *p;

p=&a; // *p是和a等价的

二、左值和右值

int a=999;

int b;

b=a;

(1)a、b都是变量

(2)b=a;是赋值语句;赋值号左边称为左值,表示内存 b;右边称为右值,表示内存 a中的数据。

三、指针有关的两个重要运算符:& 和 *

学习指针,有两个关键的运算符:& 和 *。

& 和 * 的含义
表达式解释
&aa是变量,代表一块内存;&a 表示 a 的内存的地址
*p

p是指针变量或者地址值

*p  作为左值表示p指向的内存

*p  作为右值表示p所指内存中的值

int a=999;

printf("%d %d",a,*&a);// 999   999

*&放在一起,抵消掉了

(1)&a 表示取变量的地址

(2)*(&a),当其处于赋值号左端,表示一块内存;档期处于赋值号右边,表示这块内存中的值

#include <stdio.h>
int main(void)
{    
    int a;
    a=100;
    
    printf("%d\n",a);// 100
    *&a=200;
    printf("%d\n",a);// 200

}

四、应用

#include <stdio.h>
int main(void)
{    
    int a,b;
    a=100;
    b=200;
    int *p,*q;
    p=&a;
    q=&b;
    
    *p=*q;

}

最难的一句就是

*p=*q;

利用代入法:

因为:p=&a; q=&b;

所以:*p=*q;

等价于:*&a=*&b;

利用抵消原理:

等价于:a=b;

这样,把复杂的指针变量转化为普通变量。等大家熟悉了,根本就不需要代换了,看到*p;就会条件反射的得出:“*p等价于a” 的结论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值