NOIP 提高组初赛 · NOIP 2015 提高组初赛试题 第 24 题

选择题 · 答案 Ab · 考点:字符数组与字符串处理

← 整套速查表 NOIP 提高组初赛 全部真题

题目

#include <iostream> 
using namespace std; 
void fun(char *a, char *b) { 
    a = b; 
    (*a)++; 
} 
int main() { 
    char c1, c2, *p1, *p2; 
    c1 = 'A'; 
    c2 = 'a'; 
    p1 = &c1; 
    p2 = &c2; 
    fun(p1, p2); 
    cout << c1 << c2 << endl; 
    return 0; 
} 

输出:_________

答案:Ab

考点

字符数组与字符串处理 讲解 →字符数组与字符串处理 真题汇总 →

解题思维

这题考指针传值与解引用。拿到题先看 fun 里 a=b 只是改了形参指向,(*a)++ 才真正改 c2,p1 仍指 c1,所以输出 Ab。

常见错误

最容易错在以为 a=b 把 p1 也改成了 p2,或者把 (*a)++ 当成对 a 这个指针变量本身自增。其实指针传值是值传递,形参 a 只是局部变量,a=b 只改变 a 指向的地址,p1 不变;(*a)++ 是对 a 指向的字符自增,c2 从'a'变'b',c1 仍是'A',所以输出 Ab。

详细解析(节选)

考点概念:指针传参与解引用

这题的核心就是两个概念:指针传值是值传递,解引用是访问指针指向的内存。

命题视角:为什么考这个?

命题人喜欢用局部变量和指针混合来考察学生对参数传递机制的理解。这里 fun 函数里 a=b 看似简单,但学生容易忽略它只是改变了形参 a 的指向,而不会影响实参 p1。(*a)++ 则是典型的解引用操作,考察学生是否清楚指针和它指向的变量的区别。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断