C指针解析 ------ 指针表达式

         本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020

         所谓的指针表达式是指一个表达式,其结果是一个指针。

       例1.

int  a,b;

int array[20];

int *p;

p = &a;             //&a 就是一个指针表达式,因为&a的结果就是一个指针。

int **q = &p;     //&p也是一个指针表达式。

*q = &b;            //*p和&b都是一个指针表达式。

p = array;

p++;                   //同理,这也就是指针表达式。

        例2.

char *arr[10];

char **parr = arr;           //arr可以看做是一个指针,代表数组的首地址,这样,arr也是一个指针表达式。

char *s;

s = *parr;                        //很容易看出*parr也是一个指针表达式。

s = *(parr+2);                 //同理,*(parr+2)是一个指针表达式。


        因为,指针表达式的结果是一个指针,所以指针表达式也满足指针的四个要素,即,指针的类型,指针所指向的类型,指针的值或指针所指向的内存地址,以及指针自身占据的内存。

       另外,需要注意,当一个指针表达式的结果指针已经明确地具有指针自身占据的内存的话,那么这个指针表达式就是一个左值,可以进行自加,自减等操作,否则的话,这个指针表达式就不是一个左值。如例1中的&a就不是一个左值,因为没该表达式的结果指针也就是a的地址并没有占据内存,所以不是一个左值,当然不能进行自加等操作了,但*q就是一个左值,因为在定义时,已经给指针q分配空间了。


     


        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值