题目
p1指向某个整型变量,要使指针p2也指向同一变量,哪一个语句是正确的.A. p2=*&p1;B. p2=**p1;C. p2=&p1;D. p2=*p1
p1指向某个整型变量,要使指针p2也指向同一变量,哪一个语句是正确的.
- A. p2=*&p1;
- B. p2=**p1;
- C. p2=&p1;
- D. p2=*p1
题目解答
答案
p1 指向某个整型变量 ,假设指向变量a, a的值是100 ,a的地址是0x0022ffff, 我画个图 p1 0x0022abcc 0x0022ffff ------> a 0x0022ffff 100 本身的地址 存放的 内容 本身的地址 存放的 内容A 先取p1的地址,然后进行间接操作,说明p2里面也放的 0x0022ffffB 对p1进行1次间接操作,等于访问了0x0022ffff 中的内容,再进行间接操作,等于访问内存地址为100的内容,显然是非法的C p2取的是p1的地址,也就是p2指向p1D p2等于100,为什么,p2等于对p1进行间接访问,取的是内存0x0022ffff中的值,不就是100么总之,搞清楚指针就是一个只放地址的存储空间,也是普通变量,只不过不放int ,不放float,只放地址,可以进行间接操作,就是访问那个地址的值,就OK了
解析
考查要点:本题主要考查对指针变量的理解,特别是如何通过指针操作使两个指针指向同一变量。
解题核心思路:
- 指针的本质是存储变量的地址,通过指针可以间接访问该地址的值。
- 要使两个指针指向同一变量,需确保它们存储的地址相同。
- 关键操作:通过指针的间接访问(
*
)和取地址(&
)操作,分析各选项是否能正确传递地址。
破题关键点:
- 选项A通过
*&p1
组合操作,先取p1
的地址,再取该地址的值(即p1
本身存储的地址),最终使p2
与p1
指向同一变量。 - 其余选项因操作顺序或逻辑错误,无法正确传递地址。
选项分析
*选项A:`p2 = &p1`**
&p1
:取p1
指针变量本身的地址(即存储p1
的内存位置)。- *`
操作**:对
&p1的结果取间接值,即取出
p1存储的地址(假设为变量
a`的地址)。 - 赋值:
p2
最终存储a
的地址,与p1
指向同一变量。
选项B:`p2 = p1`**
- *`p1
**:取
p1指向的变量
a的值(如
100`)。 - `p1
**:试图对
100取间接值,但
100`是整数而非地址,导致非法内存访问。
选项C:p2 = &p1
&p1
:取p1
指针变量本身的地址,使p2
指向p1
,而非p1
指向的变量。
*选项D:`p2 = p1`**
- *`p1
**:取
p1指向的变量
a的值(如
100),将整数赋值给指针
p2,导致
p2`指向无效地址。