#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;
} 输出:_________
这题考指针传值与解引用。拿到题先看 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)++ 则是典型的解引用操作,考察学生是否清楚指针和它指向的变量的区别。