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

来源:互联网 发布:联通云数据公司待遇 编辑:程序博客网 时间:2024/05/16 07:38

         本文是自己学习所做笔记,欢迎转载,但请注明出处: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 0
原创粉丝点击