指针表达式总结

指针表达式总结

首先,让我们来看一些声明
    char ch='a';//声明字符型变量,并初始化
    char *cp=&ch;//声明指针变量,并初始化
下面我们来看一下,普通变量和指针变量在不同表达示中做左值与右值有什么不同:
     首先来看个简单的作为开始,如下面这个表达式:
      ch
     当它作为右值使用时,表式的值为字符'a'。可以当作常量赋给其它变量。
     当这个表达式作为左值使用时,这是这个内存的地址而不是刻地址所包含值,它会被当作变量接受其它常量的赋值,其本身的值会被替换。
       &ch
     当作为右值,表达式的值是变量ch的地址。
     当作为左值,是一个不合法的左值。
        cp
     当作为右值,就是cp的值,即变量ch的地址
     当作为左值,就是cp所处的内存位置,可以用动态内存给其置内存单元
        &cp
     当作为右值,这次所取的是指针变量的地址。这个结果的类型是指向字符的指针的指针。
     当作为左值,是一个不合法的左值。不没有清楚定义。
        *cp
     当作为右值,指向的是ch所在内存中存放的内容,即字符a了。
     当作为左值,指向的是ch所在内存地址
        *cp+1 
     当作为右值,表示字符a+1,其结果为字符b.
     当作为左值,是一个不合法的左值。不没有清楚定义。
        *(cp+1) 表示指向的地址加1,如果是整型变量,将在地址上加四个字节
     当作为右值,表示指向的地址加1,重新指向下一个地址所存放的值。
     当作为左值,表示指向的地址加1,指向的是下一个地址的本身 
	++cp cp++
     当作为右值,表示指向的地址加1,指向的是下一个地址的本身
     当作为左值,是一个不合法的左值。不没有清楚定义。
         *++cp *cp++
     当作为右值,前者先加加地址,后拷贝指针变量的值,其结果为字符b。后者是先拷贝指针变量的值,在来加加地址。其结果为字符a.
     当作为左值,表示指向的地址加1,指向的是下一个地址的本身
         ++(*cp)(*cp)++
     当作为右值,表示字符a+1,其结果为字符b.跟普通变量的自加,自减一样
     当作为左值,是一个不合法的左值。不没有清楚定义。
         ++*++cp 一定要清楚这些操作符的结合性是从右到左,所以是先执行*++cp,可以来成这样++(*++cp)
     当作为右值,表示先地址加加,指出指针指向的数在来加加
     当作为左值,是一个不合法的左值。不没有清楚定义。   
     
              
 
          
            
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值