C語言筆記第四章指針表達式

字號:

第四章 指針表達式
    一個表達式的最后結果如果是一個指針,那么這個表達式就叫指針表達式。
    下面是一些指針表達式的例子:
    例六:
    int a,b;
    int array[10];
    int *pa;
    pa=&a;//&a是一個指針表達式。
    int **ptr=&pa;//&pa也是一個指針表達式。
    *ptr=&b;//*ptr和&b都是指針表達式。
    pa=array;
    pa++;//這也是指針表達式。
    例七:
    char *arr[20];
    char **parr=arr;//如果把arr看作指針的話,arr也是指針表達式
    char *str;
    str=*parr;//*parr是指針表達式
    str=*(parr+1);//*(parr+1)是指針表達式
    str=*(parr+2);//*(parr+2)是指針表達式
    由于指針表達式的結果是一個指針,所以指針表達式也具有指針所具有的四
    個要素:指針的類型,指針所指向的類型,指針指向的內存區(qū),指針自身占據的
    內存。
    好了,當一個指針表達式的結果指針已經明確地具有了指針自身占據的內存
    的話,這個指針表達式就是一個左值,否則就不是一個左值。
    在例七中,&a不是一個左值,因為它還沒有占據明確的內存。*ptr是一個左
    值,因為*ptr這個指針已經占據了內存,其實*ptr就是指針pa,既然pa已經在內
    存中有了自己的位置,那么*ptr當然也有了自己的位置。
    一個表達式的最后結果如果是一個指針,那么這個表達式就叫指針表達式。
    下面是一些指針表達式的例子:
    例六:
    int a,b;
    int array[10];
    int *pa;
    pa=&a;//&a是一個指針表達式。
    int **ptr=&pa;//&pa也是一個指針表達式。
    *ptr=&b;//*ptr和&b都是指針表達式。
    pa=array;
    pa++;//這也是指針表達式。
    例七:
    char *arr[20];
    char **parr=arr;//如果把arr看作指針的話,arr也是指針表達式
    char *str;
    str=*parr;//*parr是指針表達式
    str=*(parr+1);//*(parr+1)是指針表達式
    str=*(parr+2);//*(parr+2)是指針表達式
    由于指針表達式的結果是一個指針,所以指針表達式也具有指針所具有的四
    個要素:指針的類型,指針所指向的類型,指針指向的內存區(qū),指針自身占據的
    內存。
    好了,當一個指針表達式的結果指針已經明確地具有了指針自身占據的內存
    的話,這個指針表達式就是一個左值,否則就不是一個左值。
    在例七中,&a不是一個左值,因為它還沒有占據明確的內存。*ptr是一個左
    值,因為*ptr這個指針已經占據了內存,其實*ptr就是指針pa,既然pa已經在內
    存中有了自己的位置,那么*ptr當然也有了自己的位置。