一道C语言的题目,求详细解释*pa与pa的区别

Python053

一道C语言的题目,求详细解释*pa与pa的区别,第1张

这里涉及的主要是对指针的理解;

首先声明四个变量,两个int类型的变量,两个int *类型的变量;int类型的变量存储的是int类型的值,int *类型的变量存储的是一个地址,这个变量可以存储一个int类型的地址,而这个int类型的地址里面毫无疑问存储的是一个int类型的值。

int *pa=&a,可分解成:

int *pa

pa = &a//把a的地址赋给pa

这样pa这个指针就指向了变量a的地址;

* 是一个解引用符,在这里,*pa就是指针pa所指向的内存当中存储的变量;也就是说这时*pa与a是等价的。

pb与b的关系也是一样的;

现在就很清楚了:

*pa=3//往a这个变量里存3

*pb=4//往b里存4

a=5//往a里存5

b=6//往b里存6

pb=pa//pb这个指针指向变量a的地址

*pa + *pb//就是a + a,并且此时a = 5

答案自然是 A

这里把pa称为“地址pa“,把*pa称为"变量pa"。

pa+2是地址pa+2,意思是pa后两个单位的地址

*pa就是变量pa,就是pa这个地址所存储的值

*pa+2,就是pa所存储的值加2

*(pa+2),就是地址pa后两个单位的地址所存储的值

*(*pa+2),就是把pa所存储的值加2后的值当作地址,取该地址所存储的值

*(*(pa+1)+2),先把pa地址加1个单位,取所存储的值,该值再加2。以最后的值为地址,取该地址所存储的值